为什么CreateProcess()不起作用?

时间:2011-06-20 13:26:11

标签: winapi createprocess compatibility-mode

我有一个试图在Windows 7中重启资源管理器的程序;它首先结束该过程,然后再次启动它。

简单?

所以它看起来 - 它似乎确实有效。但是,我注意到一些有趣的事情:当我尝试在兼容模式下启动一个程序(比如XP的Power Calculator powertoy)时,它不再有用了!没有任何反应 - 进程已创建并立即退出。

如果我通过任务管理器的“运行”对话框运行资源管理器,则程序运行正常。

发生了什么事??

#include <windows.h>
int main()
{
    PROCESS_INFORMATION pi;
    STARTUPINFO si = {sizeof(si)};
    TCHAR path[] = TEXT("explorer");
    DWORD f = 0; //I tried a variety of these flags; didn't work
    return CreateProcess(NULL, path, NULL, NULL, FALSE, f, NULL, NULL, &si, &pi);
}

编辑1:

  • 禁用WOW64重定向时为32位这一事实没有任何区别。我把它设为64位,问题是一样的。
  • 我尝试了ShellExecute,但它也没有用。

编辑2:

同样的代码只为我工作了几次,然后再次停止工作......嗯?

1 个答案:

答案 0 :(得分:0)

这不是“为什么”的答案,但我设法找出 如何自行解决:

如果我使用CreateEnvironmentBlock复制环境变量,而不是从当前流程复制环境变量,那么它可以正常工作。

我仍然没有想出是什么导致它,但是......