我有3個程序,App1.exe,App2.exe和App3.exe。每個都可以彼此獨立運行,但App2.exe可以使用ShellExecuteEx運行App3.exe,並且App1.exe可以使用ShellExecuteEx運行App2.exe(進而可以運行App3)。當使用GUI時,App3具有可選的命令行參數,但不會顯示,但會自動生成輸出文件並關閉。當App2運行App3傳遞命令行參數時,它工作得很好,但是當App1運行運行App3的App2傳遞命令行參數時,App3的ShellExecuteEx返回true,但GUI顯示並且不會創建輸出文件。
你知道爲什麼會發生這種情況嗎?它可以在Windows XP上工作,但它不在Vista或7上。我也嘗試使用CreateProcess(),它給出了相同的結果。所有3個應用程序都在同一個文件夾中。從EXE EXE執行EXE
FillChar(exInfo, Sizeof(exInfo), 0);
with exInfo do
begin
cbSize:= Sizeof(exInfo);
fMask := SEE_MASK_NOCLOSEPROCESS;
lpVerb:= 'open';
lpFile:= PChar('App3.exe');
lpParameters := PChar('/Param1 Param2 "' + folderpath + 'outputfile.txt"');
nShow := SW_HIDE;
end;
if ShellExecuteEx(@exInfo) then
begin
repeat
Sleep(500);
GetExitCodeProcess(exinfo.hProcess, exitcode)
until (exitcode <> STILL_ACTIVE);
end;
CloseHandle(exinfo.hProcess);
問題肯定是工作目錄。更改代碼以傳遞完整文件路徑後,它可以很好地工作。 –