0

基本上,我正在尝试运行在远程机器上复制的批处理文件,顺便说一下,这是我第一次尝试编码,所以请友好,但如果你愿意,请批评它,我还在学习语言和不得不花 3 个小时才能走到这一步,感谢上帝的谷歌,哈哈。

代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void cleanerBtn_Click(object sender, EventArgs e)
        {
            //Copying Batch File to Remote Host
            string fileToCopy = "C:\\Clean.bat";
            string newLocation = hostName.Text;
            string newFile = (newLocation + "\\clean.bat");

            System.IO.File.Copy(fileToCopy, newLocation);

            //Run PsExec
            string psExec = "psexec -s "+newLocation+" cmd";
            System.Diagnostics.Process.Start("CMD.exe", psExec);

            //Run Batch File using PsExec


            //Removing Batch File from Remote Host
            System.IO.File.Delete(newFile);

        }

    }
}

提前致谢。

4

2 回答 2

2

从 PSExec 帮助:

-c 将指定程序复制到远程系统执行。如果省略此选项,则应用程序必须位于远程系统的系统路径中。

使用该标志使 PSExec 将要执行的批处理文件复制到远程系统并运行它。您不必为此编写额外的代码。

基本上你想做:

psexec \\server cmd.exe /c file_you_want_to_run.bat
于 2011-04-13T23:16:03.960 回答
0

尝试使用 /C 运行 CMD.exe。从 cmd.exe 帮助:

/C 执行字符串指定的命令,然后终止

/C 需要附加到 psExec 的内容中:

System.Diagnostics.Process.Start("CMD.exe", "/C " + psExec);

我相信你会得到预期的结果。如果没有,您可能需要确保psexec.exe它位于 PATH 环境变量中的目录中。

此外,您可能有兴趣查看ProcessStartInfo以指定可以为执行流程设置的其他不同参数。

于 2011-04-13T03:32:16.010 回答