Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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
Windows services 为什么CreateProcessAsUser会因“失败”;“拒绝访问”;从服务子进程调用时_Windows Services_Createprocessasuser - Fatal编程技术网

Windows services 为什么CreateProcessAsUser会因“失败”;“拒绝访问”;从服务子进程调用时

Windows services 为什么CreateProcessAsUser会因“失败”;“拒绝访问”;从服务子进程调用时,windows-services,createprocessasuser,Windows Services,Createprocessasuser,我正在尝试使用CreateProcessAsUser函数从我的服务中以其他用户的身份运行该进程。下面是代码示例。 操作系统-视窗10 当我在主服务进程中运行代码时,代码运行良好。但我需要从子服务进程运行相同的代码。在本例中,CreateProcessAsUser返回0,GetLastError=5(访问Dennied) 子服务进程由下一次调用创建 CreateProcess(NULL, "d:\\child.exe", NULL, NULL, FALSE, 0u, NULL, NULL, &am

我正在尝试使用CreateProcessAsUser函数从我的服务中以其他用户的身份运行该进程。下面是代码示例。 操作系统-视窗10

当我在主服务进程中运行代码时,代码运行良好。但我需要从子服务进程运行相同的代码。在本例中,CreateProcessAsUser返回0,GetLastError=5(访问Dennied)

子服务进程由下一次调用创建

CreateProcess(NULL, "d:\\child.exe", NULL, NULL, FALSE, 0u, NULL, NULL, &si.StartupInfo, &pi)
我的代码在“child.exe”二进制文件中工作,应该再创建一个进程,以这种方式启动“d:\test.exe”二进制文件

CreateProcessAsUser(hUserTokenDup,
        NULL,
        "d:\\test.exe",
        NULL,
        NULL,
        FALSE,
        CREATE_NEW_CONSOLE | /*CREATE_BREAKAWAY_FROM_JOB |*/ NORMAL_PRIORITY_CLASS,
        NULL,
        NULL,
        &si,
        &pi);
对于测试,我将启动“test.exe”的代码移动到了“child.exe”启动(服务主进程)和“test.exe”正常启动的相同位置。对于测试,我用相同的参数(用户令牌除外)替换了CreateProcess上的CreateProcessAsUser,test.exe也可以正常启动

但我需要从服务子进程(从“child.exe”)启动“test.exe”,并通过CreateProcessAsUser启动它。我尝试了很多来自互联网的解决方案(添加创建、脱离工作、使用DuplicateTokenEx、使用linkedToken、启用所有可能的特权等等),但没有任何解决方案对我有帮助。我不期望服务流程和子流程之间有任何区别。但看起来有些不同,我找不到它是什么


有人能告诉我,主服务器进程和它的子进程有什么区别吗?

我的同事找到了解决方案

我在这里发表:

在创建服务子进程之前,服务子进程可以在将标记JOB_OBJECT_LIMIT_BREAKAWAY_OK | JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK传递给服务器进程中的SetInformationJobObject函数后启动子进程。在那之后

WTSGetActiveConsoleSessionId(

WTSQueryUserToken(

CreateProcessAsUser(…从作业中创建分离

在不创建重复句柄的情况下正常工作事件