App1.exe、App2.exe、App3.exe の 3 つのプログラムがあります。それぞれは互いに独立して実行できますが、App2.exe は ShellExecuteEx を使用して App3.exe を実行し、App1.exe は ShellExecuteEx を使用して App2.exe を実行する場合があります (これにより、App3 が実行される場合があります)。App3 にはオプションのコマンド ライン パラメーターがあり、使用すると GUI は表示されませんが、自動的に出力ファイルを生成して閉じます。App2 がコマンド ライン パラメーターを渡して App3 を実行すると問題なく動作しますが、App1 がコマンド ライン パラメーターを渡して App3 を実行する App2 を実行すると、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 );