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);