下面的代碼無法啓動文檔。我收到錯誤193(%1不是有效的Win32應用程序)。啓動可執行文件正常工作。 文件正確關聯,雙擊時會啓動相應的應用程序。 我已經搜索SO和其他地方的錯誤消息,CreateProcess的東西等(例如Why is CreateProcess failing in Windows Server 2003 64-bit? 我知道引用命令行。爲什麼CreateProcess會給出錯誤193(%1不是有效的Win32應用程序)
這是一個Delphi XE2(更新4)在一個64位的Win7的Win32應用VMware虛擬機。
的代碼也沒有在主機上(Win7的64位),並在虛擬PC虛擬機與32位XP。
應在Win7的虛擬機(Excel 2003和深紅啓動應用程序編輯器)是32位。
發生故障無論是從IDE啓動或運行測試程序獨立位置
它曾經是Delphi2007代碼,編譯後的D2007的應用程序,其中的代碼來自於世界各地的作品很好,當時。
代碼有什麼問題?這是幾乎一樣,如果我忽視的東西很明顯的....提前
感謝,
月
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;
的說上一句,如果你專門調用記事本上的文本文件,會發生什麼? – BugFinder
我對Delphi並不熟悉,但WINAPI'CreateProcess()'只能用於啓動'.exe's。如果想要運行其他類型的文件,您需要使用['ShellExecute()'](http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v = vs.85).aspx )。 – hmjd
@hjmd該代碼用於在以前的代碼版本中工作,調用.XLS文件。 –