如何使用C#以编程方式远程(从另一台计算机)注销用户?我所知道的只是他们的用户名。这是在Active Directory环境中完成的,执行此操作的帐户将是管理员(域管理员)。我认为安全性将得到处理。希望避免在机器上安装应用程序。
似乎确实有一个API,虽然我不知道它的用途,因为windows提供的“logoff.exe”提供了这种功能。最后我可以使用它,但更愿意避免使用Process.Start并依赖它(加上它不会使用用户名,只需要会话ID)。
答案 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/
提供了更多特定于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);
}