【问题标题】:Problem while trying to run .exe on remote with psexec (c#)?尝试使用 psexec (c#) 在远程运行 .exe 时出现问题?
【发布时间】:2011-04-04 06:28:25
【问题描述】:

大家好, 我正在尝试在远程机器上运行一个 exe 文件(不是来自,而是 ON)。

我有如下非常简单的代码:

ProcessStartInfo info = new ProcessStartInfo("C:\\PsTools");
info.FileName = "psexec \\\\" + machine.Name + "\\C\\Program Files\\test.exe";
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
Process p = Process.Start(info);

当尝试运行此代码时,我收到“系统找不到指定的文件”错误。

  1. 在指定目录中有一个名为“test.bat”的文件。
  2. 远程机器在同一个域中,C文件夹是共享的(我是管理员)。
  3. 我已安装 PsTools 并将其配置为环境变量。
  4. 我尝试了各种代码(例如,如果我不在 ProcessStartInfo 构造函数和 FileName 属性上使用“psexec”,则 bat 文件在本地计算机上运行,​​而不是在远程计算机上运行...)但什么也没有有效!

有什么想法吗?

【问题讨论】:

  • 当您从命令行运行 psexec 时,您是否设法让它工作?我怀疑这是要尝试的第一件事。
  • 嗯,是不是因为“\\C\\Program Files\\test.exe”中少了一个冒号?

标签: c# exe psexec


【解决方案1】:

我的猜测是找不到psexec,因为您已将 UseShellExecute 设置为 false。尝试提供 psexec.exe 的完整路径。

您还应该将FileName 属性设置为只是您要启动的文件,并将Arguments 属性设置为命令行参数,如下所示:

ProcessStartInfo info = new ProcessStartInfo("C:\\PsTools");
info.FileName = @"c:\whatever\psexec.exe";
info.Arguments = @"""\\" + machine.Name + @"\C\Program Files\test.exe""";
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
Process p = Process.Start(info);

请注意,我Arguments 属性中添加了双引号,这样它就不会因为“程序文件”中有空格而分成两个参数。 p>

【讨论】:

  • 好吧,我对这个网站有点陌生,所以我已经发布了我的答案:\
  • @Amit 也标记答案,如果您对答案感到满意,请单击箭头下方的“打勾”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 2014-10-22
相关资源
最近更新 更多