Запустите приложение на удаленном ПК с помощью С#

Я хочу запустить приложение на удаленном компьютере, подключенном через локальную сеть.

Это код, который я использовал:

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$


person Ivan Kozlov    schedule 30.03.2018    source источник
comment
Привет и добро пожаловать в SO, хороший вопрос; Я надеюсь, что вы можете найти помощь в этом.   -  person Craig van Tonder    schedule 30.03.2018
comment
Привет! Я надеюсь, что это так..   -  person Ivan Kozlov    schedule 30.03.2018
comment
@ИванКозлов входят в систему как администратор, когда проверяют, запущен ли Notepad.exe?   -  person Alexey Klipilin    schedule 30.03.2018
comment
Не уверен, что указанный дубликат является реальным ответом на это, что, если именно этот подход требуется для удаленного запуска приложения   -  person Alexey Klipilin    schedule 30.03.2018
comment
@Алексей, Да, я вошел в систему как Администратор на компьютере, где пытаюсь запустить блокнот.   -  person Ivan Kozlov    schedule 30.03.2018
comment
@ Алексей Я понимаю вашу точку зрения, но суть каждого дубликата, который я видел, в том, что это невозможно с помощью WMI. Это с удаленным Powershell.   -  person Patrick Hofman    schedule 30.03.2018
comment
@PatrickHofman хорошо, теперь это выглядит более ясно.   -  person Alexey Klipilin    schedule 30.03.2018
comment
@ИванКозлов есть возможность передать учетные данные, пожалуйста, проверьте документацию, я думаю, это не будет проблемой. И в чем может быть проблема, так это в том, что вам нужно изменить реестр на удаленном ПК этим reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f   -  person Alexey Klipilin    schedule 30.03.2018
comment
@Алексей, есть ли возможность использовать первый метод, или лучше оставить его и сосредоточиться на методе ProcessStartInfo?   -  person Ivan Kozlov    schedule 30.03.2018
comment
@ИванКозлов, если честно, я никогда раньше не пользовался ManagementScope, не могу сказать наверняка. Патрик говорит - используй psexec, я думаю, он знает, что говорит   -  person Alexey Klipilin    schedule 30.03.2018