首页 > 解决方案 > 远程启动进程

问题描述

我正在更新要使用名为 GoAnywhere 的服务启动的程序。该程序的先前版本在具有自己的第三方软件副本的服务器上作为计划任务运行。

我正在使用以下代码调用该过程:

ProcessStartInfo pI = new ProcessStartInfo();
pI.CreateNoWindow = true;
/*
* Tried: @\\server\path\to\process, @\\server\c$\path\to\process - generate errors on server
* Tried: @c:\local\path\process, @process - generate errors within GoAnywhere
*/
pI.FileName = @"c:\local\path\process";
pI.Arguments = string.Format("-u {0} -j {1}", "\"User\"", "\"JobName\"");

我可以直接在服务器上运行该软件(模仿最初的本地计划进程),但如果我通过 GoAnywhere 启动它,我会遇到两个错误之一。

  1. GoAnywhere 任务运行我的软件,该软件启动进程 (@\server\path\to\process)。这会导致本地错误(通过在服务器上以相同方式运行软件来证明),包括安全错误。如果绕过安全错误,则会出现第二个错误,指示未正确安装第三方软件。如果错误没有被绕过,那么我的软件会根据 GoAnywhere 任务协议超时。
  2. GoAnywhere 任务运行我的软件,该软件启动进程 (@c:\local\path\process)。但是,该过程因以下捕获的异常而失败。

    System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
    at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
    at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
    at InsightCass.Program.Main(String[] args)
    

很明显,使用本地路径可以让我直接在服务器上运行它,而不是通过远程任务。有没有办法使用其完整的服务器路径来指示服务器进程,但让服务器将其视为在本地调用它?

标签: c#process

解决方案


推荐阅读