以下代码无法启动文档。我收到错误193 (%1不是有效的Win32应用)。启动可执行文件工作正常。这些文件是正确关联的,它们会在双击时启动相应的应用程序。我已经在SO和其他地方搜索了错误消息,createprocess之类的东西(例如,Why is CreateProcess failing in Windows Server 2003 64-bit?我知道如何引用命令行。
< code >F212
代码有什么问题?就好像我忽略了一些非常明显的东西……
提前谢谢你,
1月
procedure StartProcess(WorkDir, Filename: string; Arguments : string = '');
var
StartupInfo : TStartupInfo;
ProcessInfo : TProcessInformation;
lCmd : string;
lOK : Boolean;
LastErrorCode: Integer;
begin
FillChar( StartupInfo, SizeOf( TStartupInfo ), 0 );
StartupInfo.cb := SizeOf( TStartupInfo );
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := sw_Normal;
FillChar( ProcessInfo, SizeOf( TProcessInformation ), 0 );
lCmd := '"' + WorkDir + FileName + '"'; // Quotes are needed https://stackoverflow.com/questions/265650/paths-and-createprocess
if Arguments <> '' then lCmd := lCmd + ' ' + Arguments;
lOk := CreateProcess(nil,
PChar(lCmd),
nil,
nil,
FALSE, // TRUE makes no difference
0, // e.g. CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS makes no difference
nil,
nil, // PChar(WorkDir) makes no difference
StartupInfo,
ProcessInfo);
if lOk then
begin
try
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
finally
CloseHandle( ProcessInfo.hThread );
CloseHandle( ProcessInfo.hProcess );
end;
end
else
begin
LastErrorCode := GetLastError;
ShowMessage(IntToStr(LastErrorCode) + ': ' + SysErrorMessage(LastErrorCode));
end;
end;
procedure TFrmStartProcess.Button1Click(Sender: TObject);
begin
StartProcess('c:\program files (x86)\axe3\','axe.exe'); // Works
end;
procedure TFrmStartProcess.Button2Click(Sender: TObject);
begin
StartProcess('d:\','klad.xls'); // Fails
end;
procedure TFrmStartProcess.Button3Click(Sender: TObject);
begin
StartProcess('d:\','smimime.txt'); // Fails
end;
发布于 2012-09-28 17:34:41
对该错误最可能的解释是:
CreateProcess
要求您提供一个可执行文件。如果您希望能够打开与其关联的应用程序的任何文件,则需要使用ShellExecute
而不是CreateProcess
.往下读到代码的底部,我可以看到问题是第一个。
发布于 2012-09-28 17:39:46
您的Button2Click
和Button3Click
函数将传递klad.xls
和smimime.txt
。这些文件很可能不是真正的可执行文件。
要使用与文件相关联的应用程序打开任意文件,请使用ShellExecute
发布于 2018-05-26 22:07:01
如果你是Clion/anyOtherJetBrainsIDE用户,yourFile.exe导致了这个问题,只要删除它,让应用程序从头开始创建并链接到libs即可。这很有帮助。
https://stackoverflow.com/questions/12637203
复制相似问题