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

我在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)  string hd = Environment.ExpandEnvironmentVariables("%USERPROFILE%"); IntPtr envBlock = IntPtr.Zero; CreateProcessAsUser(token, "PathToMenu.exe", NORMAL_PRIORITY_CLASS |CREATE_UNICODE_ENVIRONMENT, "WinSta0\\Default", hd, envBlock, "Menu"); 

谁能告诉我我做错了什么?

尝试从Vista / 7中的服务启动进程时,可能会出现大量问题。 我建议你从这篇文章开始,并根据你的需要进行调整。 我可以告诉你,我已经在文章中使用和修改了相当多的代码,并且它有效。 很抱歉,我无法向您展示,因为修改后的代码属于我的公司。