我正在尝试使用 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);