如何在远程机器上执行进程,在C#

我怎样才能在远程计算机上启动一个进程,说计算机名=“someComputer”,使用System.Diagnostics.Process类?

我在远程计算机上创build了一个小型控制台应用程序,它只是将“Hello world”写入一个txt文件,我想远程调用它。

控制台应用程序path:c:\ MyAppFolder \ MyApp.exe

目前我有这个:

ProcessStartInfo startInfo = new ProcessStartInfo(string.Format(@"\\{0}\{1}", someComputer, somePath); startInfo.UserName = "MyUserName"; SecureString sec = new SecureString(); string pwd = "MyPassword"; foreach (char item in pwd) { sec.AppendChar(item); } sec.MakeReadOnly(); startInfo.Password = sec; startInfo.UseShellExecute = false; Process.Start(startInfo); 

我不断收到“networkingpath未find”。

可以使用http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx中的; PsExec

或者WMI:

 object theProcessToRun() = { "YourFileHere" }; ManagementClass theClass = new ManagementClass(@"\\server\root\cimv2:Win32_Process"); theClass.InvokeMethod("Create", theProcessToRun); 

使用下列之一:

或者,如果你喜欢它,注入你自己的服务或COM组件。 这将会非常接近PsExec所做的。

在所有这些方法中,我更喜欢任务调度程序。 他们都是最干净的API,我想。 连接到远程任务计划程序,为可执行文件创build一个新任务,运行它。 注意:可执行文件的名称应该在本机上。 不是\ servername \ path \ file.exe,而是c:\ path \ file.exe。 如果您喜欢,请删除任务。

所有这些方法都要求您具有对目标计算机的pipe理访问权限。

ProcessStartInfo不能启动远程进程。

根据MSDN的说法,一个Process对象只允许访问远程进程,而不能启动或停止远程进程。 所以要回答你关于使用这个课程的问题,你不能。

我不相信你可以直接通过UNCpath启动一个进程; 也就是说,如果System.Process使用Windows的comspec来启动应用程序…你怎么样通过映射驱动器到“\ someComputer \ somePath”来testing这个理论,然后改变你创build的ProcessStartInfo? 如果以这种方式工作,那么您可能需要考虑以编程方式临时映射驱动器,启动您的应用程序,然后删除映射(很像从命令窗口中的pushd / popd工作)。