您的位置:首页 > 其它

Window Service程序中如何获取登陆用户的信息

2012-03-27 14:41 666 查看
在window form程序中, 获取当前用户的信息是很容易的一件事情。然而,在window service中, 如何获取当前活动的(登陆的)用户的信息,.NET 并没有给出一种很容易的方法。多数情况下,用户需要调用底层API以达到此目的。如果想在services中启动一个线程并且运行在当前活动的用户UI界面上,获取当前活动的用户,更是必须的操作。

在windows底层的api中,提供了以下的方法来满足需求:

WTSGetActiveConsoleSessionId: 获取当前active User的 session ID。

CreateProcessAsUser:用当前用户创建一个新的进程。

下面的程序提供了两个方法,一是获取当前活动的用户包括域名和用户名,二是用当前用户创建一个新的进程。

View Code private void RunCommand(object state)
{
try
{
var cmdBatch = state as string;
if (string.IsNullOrEmpty(cmdBatch))
return;

string applicationName = null;
if (Path.GetExtension(cmdBatch).Equals(".BAT"))
applicationName = "cmd.exe";

// launch the application
ApplicationLoader.PROCESS_INFORMATION procInfo;
ApplicationLoader.StartProcessAndBypassUAC(applicationName, "\"" + cmdBatch + "\"", out procInfo);

// check the process and get the complete or not.
var process = Process.GetProcessById((int)procInfo.dwProcessId);
if(process != null)
process.WaitForExit();
}
catch (Exception ex)
{
EventLog.WriteEntry(ex.Message, System.Diagnostics.EventLogEntryType.Error);
}
} 通过以上的方法,可以看到,当前启动的进程运行在活动用户的界面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐