【问题标题】:How can you run a process on another computer in .net如何在 .net 中的另一台计算机上运行进程
【发布时间】:2014-02-03 04:38:35
【问题描述】:

假设我有一个名为“MyService”的 Windows 服务和一个名为“MyEXE”的可执行文件,位于我网络上的多台计算机上。

是否可以(从“MyService”中)在不同/同一台计算机上启动多个“MyEXE”实例,让它执行某些任务并将真/假结果返回给“MyService”中的回调方法?

类似的东西

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);
    }
}

也许我弄错了整个架构!

【问题讨论】:

    标签: c# windows-services parallel-processing appdomain


    【解决方案1】:

    您可以做的一件事是在单独的进程中从 Sysinternals 运行 PsExec 工具 (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx),将结果通过管道传输到文件,然后对其进行解析以判断成功/失败。

    【讨论】:

    • +1,PS Exec 是在远程机器上运行 exe 的方式。谁投了反对票,你能说一下为什么,PS Exec有什么问题吗?没有评论的否决票毫无意义。
    【解决方案2】:

    你可以像 Ian 所说的那样使用 PSexec,但我认为 WMI 是一个更好的方法,可以试试这个例子 http://www.codeproject.com/KB/cs/EverythingInWmi02.aspx

    【讨论】:

      【解决方案3】:

      一种解决方案是使用psexec,另一种是... do what psexec does:

      • 将服务 exe 作为资源嵌入到您的应用中
      • 将资源复制到 \\remotesystem\admin$
      • 使用 SCM 在 \\remotesystem 上启动此 exe 作为服务
      • connect 请求服务完成工作
      • 从 SCM 卸载服务

      【讨论】:

        【解决方案4】:

        另请参阅任务管理器 API。您现在安排一个任务运行一次 + 1 秒,等等。它基于 COM,因此非常适合 .NET。

        与 psexec 不同,它不会在目标机器上安装任何东西。

        【讨论】:

          猜你喜欢
          • 2014-01-21
          • 1970-01-01
          • 1970-01-01
          • 2020-07-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-30
          相关资源
          最近更新 更多