Windows – 为什么CreateProcess给出错误193(%1不是有效的Win32应用程序)

前端之家收集整理的这篇文章主要介绍了Windows – 为什么CreateProcess给出错误193(%1不是有效的Win32应用程序)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码无法启动文档.我得到错误193(%1不是有效的Win32应用程序).启动可执行文件工作正常.
文件正确关联,双击时启动相应的应用程序.
搜索了SO和其他地方的错误消息,创建处理内容等(例如 Why is CreateProcess failing in Windows Server 2003 64-bit?
我知道引用命令行.

>这是Win7 64位VMWare虚拟机中的一个Delphi XE2(Update 4)Win32应用程序.
>代码在主机(Win7 64位)和虚拟PC虚拟机(32位XP)中也失败.
>应该在Win7 VM(Excel 2003和Crimson Editor)中启动的应用程序是32位.
>从IDE启动或独立运行测试应用程序时,都会发生故障
>它以前是Delphi2007代码,编译的D2007应用程序,这个代码来自工作正常到处.

代码有什么问题?几乎好像我忽略了很明显的东西….

提前致谢,

一月

  1. procedure StartProcess(WorkDir,Filename: string; Arguments : string = '');
  2. var
  3. StartupInfo : TStartupInfo;
  4. ProcessInfo : TProcessInformation;
  5. lCmd : string;
  6. lOK : Boolean;
  7. LastErrorCode: Integer;
  8. begin
  9. FillChar( StartupInfo,SizeOf( TStartupInfo ),0 );
  10. StartupInfo.cb := SizeOf( TStartupInfo );
  11. StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  12. StartupInfo.wShowWindow := sw_Normal;
  13.  
  14. FillChar( ProcessInfo,SizeOf( TProcessInformation ),0 );
  15.  
  16. lCmd := '"' + WorkDir + FileName + '"'; // Quotes are needed https://stackoverflow.com/questions/265650/paths-and-createprocess
  17. if Arguments <> '' then lCmd := lCmd + ' ' + Arguments;
  18.  
  19. lOk := CreateProcess(nil,PChar(lCmd),nil,FALSE,// TRUE makes no difference
  20. 0,// e.g. CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS makes no difference
  21. nil,// PChar(WorkDir) makes no difference
  22. StartupInfo,ProcessInfo);
  23.  
  24. if lOk then
  25. begin
  26. try
  27. WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
  28. finally
  29. CloseHandle( ProcessInfo.hThread );
  30. CloseHandle( ProcessInfo.hProcess );
  31. end;
  32. end
  33. else
  34. begin
  35. LastErrorCode := GetLastError;
  36. ShowMessage(IntToStr(LastErrorCode) + ': ' + SysErrorMessage(LastErrorCode));
  37. end;
  38. end;
  39.  
  40. procedure TFrmStartProcess.Button1Click(Sender: TObject);
  41. begin
  42. StartProcess('c:\program files (x86)\axe3\','axe.exe'); // Works
  43. end;
  44.  
  45. procedure TFrmStartProcess.Button2Click(Sender: TObject);
  46. begin
  47. StartProcess('d:\','klad.xls'); // Fails
  48. end;
  49.  
  50. procedure TFrmStartProcess.Button3Click(Sender: TObject);
  51. begin
  52. StartProcess('d:\','smimime.txt'); // Fails
  53. end;
错误的最有可能的解释是:

>您尝试加载的文件不是可执行文件. CreateProcess要求您提供可执行文件.如果您希望能够使用其关联的应用程序打开任何文件,那么您需要ShellExecute而不是CreateProcess.
>加载可执行文件的依赖关系之一,即链接到可执行文件的DLL有问题.最常见的原因是32位可执行文件和64位DLL之间的不匹配,反之亦然.要调查,使用Dependency Walker’s配置文件模式来确切地检查出了什么问题.

读到底部代码,我可以看到问题是数字1.

猜你在找的Windows相关文章