Windows 8 で外部プログラムを起動していますが、svchost.exe が戻るのを待っているバックグラウンド プロセスとして停止します。同じアプリケーションを手動で (ダブルクリックして) 起動すると、正常に起動します。Windows 7 で同じコードを実行すると、問題なく動作します。
私は主に、アプリケーションを実行する 3 つの方法を試しました。
ShellExecute(NULL,L"open","MyApp.exe",NULL,NULL,SW_SHOWNORMAL);
これは ok を返しますが、アプリケーションは svchost.exe を待ってフリーズします。次に拡張版を試してみました。
SHELLEXECUTEINFO ShExecInfo;
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = Application->MainFormHandle;
ShExecInfo.lpVerb = L"open";
ShExecInfo.lpFile = L"MyApp.exe"
ShExecInfo.lpParameters = NULL;
ShExecInfo.lpDirectory = L"MyWorkDir";
ShExecInfo.nShow = SW_SHOWNORMAL;
ShExecInfo.hInstApp = NULL;
res = ShellExecuteEx(&ShExecInfo);
これもOKを返し、hInstAppが設定されていますが、以前と同じようにフリーズします。次に、CreateProcess() を試しました。
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
res = CreateProcess(L"MyApp.exe",NULL,NULL,NULL,false,0,NULL,L"MyWorkDir",&si,&pi);
これもOKを返し、PROCESS_INFORMATIONは正しく入力されますが、それでもフリーズします。プロセスを作成すると、RAD Studio に次のようなデバッグ メッセージが表示されます。
Application "\??\C:\Windows\Program Files (x86)\ ... MyApp.exe" found in cache
Application "\??\C:\Windows\Program Files (x86)\ ... MyApp.exe" cache bypassed reason 0x86
Windows 8 タスク マネージャーでは、プロセスが svchost.exe の復帰を待機していることがわかります。