如何远程注销用户?

时间:2010-10-05 20:38:58

标签: c# windows

如何使用C#以编程方式远程(从另一台计算机)注销用户?我所知道的只是他们的用户名。这是在Active Directory环境中完成的,执行此操作的帐户将是管理员(域管理员)。我认为安全性将得到处理。希望避免在机器上安装应用程序。

似乎确实有一个API,虽然我不知道它的用途,因为windows提供的“logoff.exe”提供了这种功能。最后我可以使用它,但更愿意避免使用Process.Start并依赖它(加上它不会使用用户名,只需要会话ID)。

5 个答案:

答案 0 :(得分:1)

这是用户管理的更多终端服务器端,但我真的很喜欢使用Cassia


另一种选择是这样做

System.Diagnostics.Process.Start("shutdown.exe", String.Format(@"/l /f /m \\{1}", remoteComputerName));

/l是注销。 /f是力量。 /m \\computername是要执行操作的远程计算机的名称。如果您不在域中并且运行该应用程序的用户没有域管理员权限,我无法保证上述命令可以正常工作。


第三种选择: 获取PsExec然后在远程计算机上运行shutdown命令(shutdown.exe /l /f

答案 1 :(得分:0)

看看这个ServerRemoteControl

答案 2 :(得分:0)

WMI类win32_operatingsystem wmi可能很有用,更具体地说是win32shutdown方法(也有注销标志)。

答案 3 :(得分:0)

我相信你可以通过WMI这样做。这是一个包含常规脚本的网站:http://www.waynezim.com/2009/04/remote-shutdown-logoff-script-using-wmi/

此链接(http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/59dd345d-df85-4128-8641-f01f01583194

提供了更多特定于C#的信息,并提供了关于如何在用户断开连接但仍然登录时使其工作的提示。

答案 4 :(得分:0)

这是我非常简单的解决方案。这将远程注销当前登录的用户。如果要注销特定用户,请先查询会话ID,然后在会话ID中更改“console”。

private void runRemoteApp(string[] processToRun, string machineName)
{
    var connection = new ConnectionOptions();
    var wmiScope = new ManagementScope(String.Format("\\\\{0}\\root\\cimv2", machineName), connection);
    var wmiProcess = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions());
    wmiProcess.InvokeMethod("Create", processToRun);
}

private void logoffMachine(string machineName)
{
    var processToRun = new[] { "logoff.exe console" };
    runRemoteApp(processToRun, machineName);
}