【发布时间】:2011-12-11 01:41:15
【问题描述】:
我有一个在 Windows 7 中运行的服务。在 Windows 7 中,所有服务都在会话 0 中运行。我想从该服务创建一个交互式用户会话(在会话 0 以外的会话中)并在该会话中启动一个应用程序。我的问题是,当我调用 LogonUser 启动交互式用户会话,然后使用 CreateProcessAsUser 启动应用程序时,应用程序最终在 Session 0 中运行。
我所有的代码都是 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 并遇到同样的问题。