私はWindows 7でサービスを実行しています。Windows 7ではすべてのサービスがセッション0で実行されます。そのサービスから、セッション0以外)、そのセッションでアプリケーションを起動します。私の問題は、LogonUserを呼び出して対話型のユーザーセッションを開始し、CreateProcessAsUserを使用してアプリケーションを起動すると、アプリケーションがセッション0で終了することです。Windows 7サービスからセッション1のプロセスを開始する方法
すべてのコードはC#です。
ここでは、関連するコードは次のとおりです。
[DllImport("advapi32.dll", SetLastError=true)]
static extern bool LogonUser(
string principal,
string authority,
string password,
UInt32 logonType,
UInt32 logonProvider,
out IntPtr token);
[DllImport("advapi32.dll", SetLastError=true)]
static extern bool CreateProcessAsUser(
IntPtr hToken,
string lpApplicationName,
string lpCommandLine,
IntPtr lpProcessAttributes,
IntPtr lpThreadAttributes,
bool bInheritHandles,
int dwCreationFlags,
IntPtr lpEnvironment,
string lpCurrentDirectory,
ref STARTUPINFO lpStartupInfo,
ref PROCESS_INFORMATION lpProcessInformation);
IntPtr token;
LogonUser("UserName", ".", "Password",
LogonTypes.Interactive,LogonProviders.Default, out token)
<code to impersonate user>
string hd = Environment.ExpandEnvironmentVariables("%USERPROFILE%");
IntPtr envBlock = IntPtr.Zero;
CreateProcessAsUser(token, "PathToMenu.exe",
NORMAL_PRIORITY_CLASS |CREATE_UNICODE_ENVIRONMENT,
"WinSta0\\Default", hd, envBlock, "Menu");
誰もが私が間違ってやっているものを私に伝えることができますか?
User856021、こんにちは弟、問題を解決したら、コードを投稿できますか?私はWindows 8を使用して、同じ問題を実行しています。 –