0

在 Windows 8 下,我正在启动一个外部程序,但它作为等待 svchost.exe 返回的后台进程卡住了。如果我手动启动相同的应用程序(双击)它启动就好了。如果我在 Windows 7 下运行相同的代码,它工作得很好。

我主要尝试了 3 种执行应用程序的方法:

ShellExecute(NULL,L"open","MyApp.exe",NULL,NULL,SW_SHOWNORMAL);

这返回正常,但应用程序冻结等待 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 返回。

4

0 回答 0