为什么CreateProcessAsUser失败并且"当该文件已经存在时无法创建文件"?

时间:2014-10-01 13:12:36

标签: windows service process createprocessasuser

我正在尝试使用CreateProcessAsUser在服务的用户会话中创建客户端进程。但是当我使用VS 2010调试它时,CreateProcessAsUser失败并且错误代码为0,错误消息为

  

在该文件已存在时无法创建文件

如果我分发它并使用安装程序安装,似乎CreateProcessAsUser偶尔会因此错误而失败。我很好奇它试图写什么文件。

我个人认为不是客户试图写点什么。由于CreateProcessAsUser只是启动进程并初始化它,然后返回。

我使用与安装程序不同的方式来安装服务。那会是原因吗?

这是代码

ZeroMemory(&m_processInfo, sizeof(PROCESS_INFORMATION));

STARTUPINFO si;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.lpDesktop = "winsta0\\Default";
si.hStdError = m_stdOutWrite;
si.hStdOutput = m_stdOutWrite;
si.dwFlags |= STARTF_USESTDHANDLES;

LPVOID environment;
BOOL blockRet = CreateEnvironmentBlock(&environment, userToken, FALSE);
if (!blockRet) {
    throw XArch(new XArchEvalWindows);
}

DWORD creationFlags = 
    NORMAL_PRIORITY_CLASS |
    CREATE_NO_WINDOW |
    CREATE_UNICODE_ENVIRONMENT;

BOOL createRet = CreateProcessAsUser(
    userToken, NULL, LPSTR(command.c_str()),
    sa, NULL, TRUE, creationFlags,
    environment, NULL, &si, &m_processInfo);

DestroyEnvironmentBlock(environment);
CloseHandle(userToken);

0 个答案:

没有答案