无法在使用CreateDesktop Windows 10创建的新桌面上启动新进程

时间:2017-09-19 06:33:53

标签: windows visual-studio

我正在尝试推出一个新流程' calc.exe'在Windows 10上的新桌面上。当我尝试切换桌面时,屏幕变为黑色(看起来像是一个没有背景的新桌面)。然后按预期切换回主桌面,我看到在那里启动了calc.exe。以下是代码段。我正在使用Visual Studio 2015进行开发。为什么calc.exe无法在第二个桌面上启动?

    HDESK originalDesktop;
    HDESK secondaryDesktop;
    originalDesktop = GetThreadDesktop(GetCurrentThreadId());
    LPWSTR secondaryDesktopName = L"Mysecondary";
    secondaryDesktop = CreateDesktop(secondaryDesktopName,
        nullptr,
        nullptr,
        DF_ALLOWOTHERACCOUNTHOOK,
        DESKTOP_SWITCHDESKTOP |
        DESKTOP_READOBJECTS |
        DESKTOP_CREATEWINDOW |
        DESKTOP_CREATEMENU |
        DESKTOP_HOOKCONTROL |
        DESKTOP_JOURNALRECORD |
        DESKTOP_JOURNALPLAYBACK |
        DESKTOP_ENUMERATE |
        DESKTOP_WRITEOBJECTS,
        nullptr);
    //SetThreadDesktop(secondaryDesktop);
    SwitchDesktop(secondaryDesktop);
    DWORD r = 0;
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    bool processCreated;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    si.lpDesktop = secondaryDesktopName;
    ZeroMemory(&pi, sizeof(pi));

    DWORD dwCreationFlags = CREATE_BREAKAWAY_FROM_JOB; // | CREATE_UNICODE_ENVIRONMENT;

    const LPWSTR calculatorExe = L"C:\\Windows\\System32\\calc.exe";
    processCreated = CreateProcess(calculatorExe,
        nullptr,
        nullptr,
        nullptr,
        TRUE,
        0,
        //dwCreationFlags,
        nullptr,
        nullptr,
        &si,
        &pi);
    //Sleep(4000);
    if (!processCreated)
    {
        //logerror
        r = GetLastError();
        fprintf(stderr, "\n\nError while creating %S process, Code: %d\n\n", calculatorExe, r);
        return r;
    }

    r = WaitForSingleObject(pi.hProcess, INFINITE);
    //GetExitCodeProcess(pi.hProcess, &r);

    int i=INT_MIN;
    while (i < INT_MAX) i++;//Add some delay so that calc.exe //gets launched
    //while (i > INT_MIN) i--;
    SwitchDesktop(originalDesktop);
    ///////////////////////

    CloseDesktop(secondaryDesktop);

我尝试启动notepad.exe,但它确实有效。不确定calc.exe。

1 个答案:

答案 0 :(得分:4)

在Windows 10上,Calculator是Store / UWP应用程序。

calc.exe是一个启动真实计算器的小存根(可能使用Application Activation Manager)。真正的计算器由Windows服务启动,该服务对您的桌面一无所知。

这也是你的等待如此快速满足的原因。 calc.exe要求启动真实的计算器应用并退出。