C # запускающий пакетный файл на удаленной машине после запуска PsExec - PullRequest
0 голосов
/ 13 апреля 2011

По сути, я пытаюсь запустить пакетный файл, который был скопирован на удаленной машине, кстати, это моя первая попытка кодирования, поэтому, пожалуйста, будьте добры, но критикуйте, если хотите, я все еще учусьязык и пришлось потратить 3 часа, чтобы получить это далеко, слава богу за Google, LOL.

Код:

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

        }

    }
}

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Из справки PSExec:

-c Скопировать указанную программу в удаленную систему для выполнения.Если этот параметр не указан, приложение должно находиться в системном пути на удаленной системе.

Используйте этот флаг, чтобы PSExec скопировал пакетный файл, который вы хотите выполнить, в удаленную систему и запустил его.Вам не нужно писать дополнительный код для этого.

В основном вы хотите сделать:

psexec \\server cmd.exe /c file_you_want_to_run.bat
0 голосов
/ 13 апреля 2011

Попробуйте запустить CMD.exe с / C.Из справки cmd.exe:

/ C Выполняет команду, указанную в строке, а затем завершает

. / C необходимо добавить к содержимому psExec:

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

Полагаю, тогда вы получите ожидаемые результаты.Если нет, возможно, вы захотите убедиться, что psexec.exe находится в каталоге, который находится в переменной среды PATH.

Кроме того, вас может заинтересовать ProcessStartInfo , чтобы указать другие другиепараметры, которые можно установить для выполнения процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...