Как удаленно выйти из системы? - PullRequest
4 голосов
/ 06 октября 2010

Как я могу программно выйти из системы удаленно (с другого компьютера) с помощью C #? Все, что я знаю, это их имя пользователя. Это делается в среде Active Directory, где выполняющая учетная запись будет администратором (администратором домена). Я предполагаю, что безопасность будет обработана. Хотелось бы избежать установки приложения на компьютере.

Кажется, что есть API, хотя я не знаю, что он использует, так как "logoff.exe", предоставляемый с Windows, обеспечивает эту возможность. В конце концов я могу использовать это, но предпочел бы избежать вызова Process.Start и полагаться на него (плюс он не берет имя пользователя, только идентификатор сеанса).

Ответы [ 5 ]

1 голос
/ 06 октября 2010

Это более терминальная сторона управления пользователями, но мне действительно нравится использовать Cassia


Другой вариант сделать это

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

/l - это выход из системы. /f - это сила. /m \\computername - это имя удаленного компьютера, на котором будет выполняться операция. Если вы не находитесь в домене, а пользователь, запускающий приложение, не имеет прав администратора домена, я не могу гарантировать, что приведенная выше команда будет работать.


Третий вариант: get PsExec затем запустите с ним команду выключения на удаленном компьютере (shutdown.exe /l /f)

0 голосов
/ 17 февраля 2017

Это мое очень простое решение. Это приведет к удаленному выходу из системы пользователя, вошедшего в данный момент. Если вы хотите выйти из системы определенных пользователей, сначала запросите идентификатор сеанса и измените «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);
}
0 голосов
/ 06 октября 2010

Я полагаю, что вы можете сделать это через 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 #, плюс подсказку окак заставить это работать, когда пользователь отключен, но все еще вошел в систему.

0 голосов
/ 06 октября 2010

WMI-класс win32_operatingsystem wmi может быть полезен, более конкретно, метод win32shutdown (также имеет флаг выхода из системы).

0 голосов
/ 06 октября 2010

Взгляните на этот ServerRemoteControl .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...