我有 3 个程序,App1.exe、App2.exe 和 App3.exe。每个都可以彼此独立运行,但 App2.exe 可以使用 ShellExecuteEx 运行 App3.exe,而 App1.exe 可以使用 ShellExecuteEx 运行 App2.exe(后者又可以运行 App3)。App3 有可选的命令行参数,如果使用 GUI 将不会显示,但会自动生成输出文件并关闭。当 App2 运行 App3 传递命令行参数时,它工作得很好,但是当 App1 运行 App2 时,App2 运行 App3 传递命令行参数,App3 的 ShellExecuteEx 返回 true,但 GUI 显示并且不创建输出文件。
你知道为什么会发生这种情况吗?它确实适用于 Windows XP,但不适用于 Vista 或 7。我也尝试使用 CreateProcess(),它给出了相同的结果。所有 3 个应用程序都在同一个文件夹中。
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 );