如何从Windows 7服务启动会话1中的进程

本文关键字:会话 进程 启动 服务 Windows | 更新日期: 2023-09-27 18:11:38

我有一个在Windows 7上运行的服务。在Windows 7中,所有服务都在会话0中运行。我想从该服务创建一个交互式用户会话(在会话0以外的会话中),并在该会话中启动一个应用程序。我的问题是,当我调用LogonUser来启动一个交互式用户会话,然后使用CreateProcessAsUser来启动应用程序时,应用程序最终在会话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");
谁能告诉我我做错了什么?

如何从Windows 7服务启动会话1中的进程

在Vista/7中,当试图从一个服务启动一个进程时,很多事情都可能出错。我建议您从本文开始,并根据自己的需要进行调整。我可以告诉您,我已经多次使用和修改了本文中的代码,并且它可以正常工作。很抱歉我不能给你看,因为修改后的代码是我公司的。