Я хочу запустить приложение на удаленном компьютере, подключенном через локальную сеть.
Это код, который я использовал:
string sLogin = "Administrator";
string sPassword = "Password";
string sComputer = "192.168.201.224";
ManagementScope ms;
ConnectionOptions co = new ConnectionOptions();
co.Username = sLogin;
co.Password = sPassword;
co.EnablePrivileges = true;
co.Impersonation = ImpersonationLevel.Impersonate;
ms = new ManagementScope(string.Format(@"\\{0}\root\CIMV2", sComputer), co);
ms.Connect();
ManagementPath path = new ManagementPath("Win32_Process");
System.Management.ManagementClass classObj = new System.Management.ManagementClass(ms, path, null);
System.Management.ManagementBaseObject inParams = null;
inParams = classObj.GetMethodParameters("Create");
inParams["CommandLine"] = "notepad.exe";
inParams["CurrentDirectory"] = "C:\\WINDOWS\\system32\\";
ManagementBaseObject outParams = classObj.InvokeMethod("Create", inParams, null);
Проблема в том, что процесс Notepad.exe запущен, и я вижу этот процесс в диспетчере задач, но окна блокнота нет.
Может ли кто-нибудь подсказать, что я сделал неправильно или чего-то не хватает?
И я попытался использовать метод из дубликата. И попытался добавить авторизацию.
var serverName = "192.168.201.224";
var psss = "Password";
try
{
System.Security.SecureString str = new System.Security.SecureString();
for(int i=0; i<psss.Length;i++)
{
str.AppendChar(psss[i]);
}
//Start the process
ProcessStartInfo info = new ProcessStartInfo("C:\\PsTools");
info.Domain = "192.168.201.224";
info.UserName = "Administrator";
info.Password = str;
info.FileName = @"C:\PsTools\psexec.exe";
info.Arguments = @"\\" + serverName + @" -i C:\WINDOWS\notepad.exe";
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
Process p = Process.Start(info);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
У меня есть Invalid UserName или Password Exceprion вместо FileNotFound.
P.S. Я нашел решение! Если кому интересно то вот:
var serverName = "192.168.201.224";
var psss = "Password";
var user = "Administrator";
var appPath = @"Path to destination app with cmd line args";
try
{
//Start the process
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = @"C:\PsTools\psexec.exe";
var args = String.Format(@"\\{0} -d -u {1} -p {2} -i {3} ", serverName,user,psss,appPath);
info.Arguments = args;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
Process p = Process.Start(info);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Но есть некоторые дополнительные требования: Вам нужно включить LanmanServer на удаленном ПК и расшарить ADMIN$ или C$
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
- person Alexey Klipilin   schedule 30.03.2018ProcessStartInfo
? - person Ivan Kozlov   schedule 30.03.2018ManagementScope
, не могу сказать наверняка. Патрик говорит - используйpsexec
, я думаю, он знает, что говорит - person Alexey Klipilin   schedule 30.03.2018