Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在使用CreateDesktop Windows 10创建的新桌面上启动新进程_Windows_Visual Studio - Fatal编程技术网

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

无法在使用CreateDesktop Windows 10创建的新桌面上启动新进程,windows,visual-studio,Windows,Visual Studio,我正在尝试在Windows 10的新桌面上启动新进程“calc.exe”。当我尝试切换桌面时,屏幕变黑(看起来它是一个没有背景的新桌面)。然后它按预期切换回主桌面,我看到calc.exe在那里启动。下面是代码片段。我正在使用Visual Studio 2015进行开发。为什么calc.exe不在第二个桌面上启动 HDESK originalDesktop; HDESK secondaryDesktop; originalDesktop = GetThreadDesktop

我正在尝试在Windows 10的新桌面上启动新进程“calc.exe”。当我尝试切换桌面时,屏幕变黑(看起来它是一个没有背景的新桌面)。然后它按预期切换回主桌面,我看到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);
HDESK-originalDesktop;
HDESK二次桌面;
originalDesktop=GetThreadDesktop(GetCurrentThreadId());
LPWSTR secondaryDesktopName=L“Mysecondary”;
secondaryDesktop=CreateDesktop(secondaryDesktopName,
nullptr,
nullptr,
DF_ALLOWOTHERACCOUNTHOOK,
桌面交换机|
桌面读取对象|
桌面创建窗口|
桌面创建菜单|
桌面控制|
桌面日志记录|
桌面日志回放|
桌面枚举|
桌面写入对象,
nullptr);
//SetThreadDesktop(第二桌面);
SwitchDesktop(第二桌面);
dwordr=0;
STARTUPINFO si;
处理信息;
创建布尔过程;
零内存(&si,sizeof(si));
si.cb=sizeof(si);
si.lpDesktop=secondaryDesktopName;
零内存(&pi,sizeof(pi));
DWORD dwCreationFlags=从作业中创建分离;//创建"UNICODE"环境,;
const LPWSTR calculatorExe=L“C:\\Windows\\System32\\calc.exe”;
processCreated=CreateProcess(calculatorExe,
nullptr,
nullptr,
nullptr,
符合事实的
0,
//dwCreationFlags,
nullptr,
nullptr,
&嗯,
&pi);
//睡眠(4000);
如果(!processCreated)
{
//对数误差
r=GetLastError();
fprintf(stderr,“\n\n创建%S进程时出错,代码:%d\n\n”,calculatorExe,r);
返回r;
}
r=WaitForSingleObject(pi.hProcess,无穷大);
//GetExitCodeProcess(pi.hProcess,&r);
int i=int_MIN;
而(iINT_MIN)i--;
SwitchDesktop(原始桌面);
///////////////////////
关闭桌面(第二桌面);

我试着启动notepad.exe,它运行正常。不确定calc.exe。

在Windows 10上,计算器是商店/UWP应用程序

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


这也是你的等待如此之快的原因
calc.exe
要求启动真正的计算器应用程序并退出。

notepad.exe也会这样吗?谢谢conio。我尝试了notepad.exe,它被正确启动。我现在很惊讶。您知道为什么会发生这种情况,或者使用calc.exe调试此问题吗?