我有一个在Windows 7中运行的服务.在Windows 7中,所有服务都在会话0中运行.我想从该服务中创建一个交互式用户会话(在非会话0的会话中)并在该会话中启动一个应用程序.我的问题是,当我调用LogonUser启动交互式用户会话...

我有一个在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");
谁能告诉我我在做什么错?
解决方法:
尝试从Vista / 7中的服务启动进程时,可能会出错.我建议您从this文章开始,并使其适应您的需求.我可以告诉您,我已经使用和修改了本文中的代码很多,并且可以正常工作.很抱歉,由于修改后的代码属于我公司,因此无法向您显示.
织梦狗教程
本文标题为:c#-如何从Windows 7服务在会话1中启动进程


基础教程推荐
猜你喜欢
- Entity Framework使用ObjectContext类 2023-06-14
- C#实现连接SQL Server2012数据库并执行SQL语句的方法 2022-11-22
- 详解c# 深克隆与浅克隆 2023-03-03
- 在Winform程序中使用Spire.Pdf实现页面添加印章功能的实现 2023-03-09
- 基于WPF实现弹幕效果的示例代码 2023-07-04
- SQL、LINQ、Lambda 三种用法(转) 2023-11-11
- C#中对象状态模式教程示例 2023-06-08
- Linux 宝塔部署 ASP.NET Core 应用 2023-09-27
- ASP.NET Core3.1在CentOS8打包Docker镜像 2023-09-27
- C# ExecuteScalar()方法案例讲解 2023-04-27