Как вы можете запустить процесс на другом компьютере в .net - PullRequest
1 голос
/ 22 апреля 2009

Допустим, у меня есть служба Windows под названием «MyService» и исполняемый файл «MyEXE», расположенные на нескольких компьютерах в моей сети.

Возможно ли (из "MyService") запустить несколько экземпляров "MyEXE" на другом / одном и том же компьютере, выполнить какое-либо задание и вернуть результат true / false в метод обратного вызова в "MyService"? 1003 *

Примерно так

class MyService : ServiceBase
{
    delegate void UpdateCallBack(int id, bool updated)
    void CheckForUpdates()
    {
        bool updatesExist = someService.GetCurrentVersion() != currentVersion;
        if(updatesExist)
        {
            UpdatePC("C:\Program Files\MyApp.exe", 1, UpdateComplete);
            UpdatePC("\\somepc\Program Files\MyApp.exe", 1, UpdateComplete);
            UpdatePC("\\mypc\Program Files\MyApp.exe", 1, UpdateComplete);
        }
    }

    void UpdatePC(string filePath, int id, UpdateCallBack callback)
    {
       //This is where I am kind of lost 
       SomeEXERunner runner = new SomeEXERunner();
       runner.Run(filePath,"-u",id,callback);
    }

    void UpdateComplete(int id, bool updated)
    {
       //do something
       if(!updated)
          EmailService.NotifyAdmin("PC Not updated", id);
    }
}

Может быть, я неправильно понимаю всю архитектуру!

Ответы [ 4 ]

10 голосов
/ 22 апреля 2009

Одна вещь, которую вы можете сделать, это запустить инструмент PsExec (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx) из Sysinternals в отдельном процессе, передать результат в файл, а затем проанализировать его, чтобы выяснить успех / неудачу.

3 голосов
/ 22 апреля 2009

Вы можете использовать PSexec, как сказал Ян, но я думаю, что WMI - лучший способ, попробуйте это для примера http://www.codeproject.com/KB/cs/EverythingInWmi02.aspx

0 голосов
/ 06 марта 2010

Также см. API диспетчера задач. Вы планируете запускать задачу один раз, сейчас + 1 секунду и т. Д. Она основана на COM, поэтому очень удобна для .NET.

В отличие от psexec, на целевой машине ничего не устанавливается.

0 голосов
/ 06 марта 2010

Одно решение - использовать psexec, другое - ... делать то, что делает psexec :

  • встроить exe службы в качестве ресурса в ваше приложение
  • скопировать ресурс в \\ remotesystem \ admin $
  • использовать SCM для запуска этого exe-файла в качестве службы в \\ remotesystem
  • connect, попросить службу выполнить работу
  • удалить службу из SCM
...