【问题标题】:Why Doesn't CreateProcess() Work?为什么 CreateProcess() 不起作用?
【发布时间】:2011-06-20 13:26:11
【问题描述】:

我有一个程序尝试在 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:

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

编辑 2:

完全相同的代码只为我工作了几次,然后又停止工作了......嗯?

【问题讨论】:

  • 你为什么要这样做? explorer.exe 不适合以这种方式使用。

标签: winapi createprocess compatibility-mode


【解决方案1】:

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

如果我用CreateEnvironmentBlock复制它们,而不是从当前进程复制环境变量,那么它就可以了。

不过我还没弄清楚是什么原因造成的……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2013-03-07
    • 2019-08-06
    相关资源
    最近更新 更多