Member 8534726 Ответов: 4

запустите код пакетного файла на языке Си#


Привет

Мне нужно запустить содержимое пакетного файла из C#. Как это сделать?

Содержимое пакетного файла:

Эхо выключено
\\server-name\directory\PsExec.exe -U домен\пользователь-идентификатор -П ****** -Д-Е cmd.exe /ц \\server-name\directory\file.exe


Я требую этого для запуска программного обеспечения с идентификатором администратора в системе, где пользователь не имеет доступа администратора.

Пожалуйста, опубликуйте полный код со всеми деталями пространства имен, так как я новичок.

Примечание: Я не хочу иметь пакетный файл, я хочу писать все на C#.

4 Ответов

Рейтинг:
31

Sergey Alexandrovich Kryukov

Вы можете использовать один из методов System.Diagnostics.Process.Start, например:

System.Diagnostics.Process.Start(myBatchFileName);
или
System.Diagnostics.Process.Start(myBatchFileName, myBatchParameters);


Все параметры являются строками. Первый параметр-это имя пакетного файла (не используйте CMD.EXE или что-то еще, используйте только имя пакетного файла), а необязательный второй параметр-это список аргументов пакетного файла, записанных в одну строку, разделенную черными пробелами.

Вы также можете назначить ссылку на дочерний процесс, который вы запускаете, когда он возвращается этими методами. Вы можете использовать эту переменную для различных целей. В частности, вы можете перевести вызывающий поток родительского процесса в состояние ожидания до тех пор, пока пакетный файл не завершит свое выполнение с помощью Process.Wait.

Наконец, вы можете скрыть консоль, перенаправить все выходные данные вашего пакетного файла в поток и прочитать весь текстовый вывод из этого потока. Вам нужно будет перенаправить хотя бы на потоки: StandardOutput и StandardError.

Пожалуйста, смотрите:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx[^].

Пример переориентации вы можете найти здесь: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx[^].

—СА


koolprasadd

gooa ответ SA +5

Sergey Alexandrovich Kryukov

Спасибо, Прасад.
--СА

Рейтинг:
1

koolprasadd

Используйте следующий код, который будет писать и запускать файл. bat.

System.IO.StreamWriter SW = new System.IO.StreamWriter("test.bat");
SW.WriteLine(@"\\server-name\directory\PsExec.exe -u domain\user-id -p ****** -d -e cmd.exe /c \\server-name\directory\file.exe");
SW.Flush();
SW.Close();
SW.Dispose();
SW = null;
System.Diagnostics.Process.Start("test.bat");


[edit]добавлен знак @ перед строкой, чтобы предотвратить ошибки, вызванные неэкранированными символами обратной косой черты.]


Member 8534726

Спасибо Прасаду за решение.

Я получаю следующую ошибку.

1. не удается найти тип или имя пространства имен IOSW.
2. Непризнанные escape-последовательность в пути ("\\server-name\directory\PsExec.exe -U домен\пользователь-идентификатор -П ****** -Д-Е cmd.exe /ц \\server-name\directory\file.exe")

Richard MacCutchan

См. мою правку выше.

Member 8534726

спасибо, Ричард !

теперь я получаю следующие ошибки

1. тип или имя пространства имен "IOSW" не существует в пространстве имен "System"(отсутствует ссылка на сборку?)

2. тип или имя пространства имен "System" не существует в пространстве имен "System" (отсутствует ссылка на сборку?)

Будь добр, направь меня.

Рейтинг:
1

uspatel

вы можете использовать как

using System.IO;
using System.Diagnostics;
.
.
.

StreamWriter sw = new StreamWriter("a.bat");

sw.WriteLine("del *.dll");
sw.Close();

Process.Start("a.bat");


Рейтинг:
0

koolprasadd

Как сказал СА, используйте Система.Диагностика.Процесс namesapce для запуска вашего пакетного файла.
вам нужно указать путь к файлу для обработки.метод Start

Process.Start(//BatchFileFullPath);


Member 8534726

Привет,

Мне не нравится иметь пакетный файл, я хочу писать свои команды пакетного файла в коде (C#).

Пожалуйста, помогите

[no name]

отлично

Sergey Alexandrovich Kryukov

Ты должен был сказать нам об этом. И почему? Вы хотите написать их или запустить. Если вы хотите их написать, то это не что иное, как написание какого-то текста (строковые манипуляции). У тебя действительно есть проблемы с этим?
--СА

lukeer

Просто адаптируйте то, что написал СА. То Process.Start() не привязан к пакетным файлам. Он может выполнить любой исполняемый файл.

System.Diagnostics.Process.Start(@"\\server-name\directory\PsExec.exe", @"-u domain\user-id -p ****** -d -e cmd.exe /c \\server-name\directory\file.exe");

Sergey Alexandrovich Kryukov

Прасад, прошу меня извинить. Если вы ссылаетесь на мой ответ, что добавляет к нему ваш собственный ответ? (Итак, я не голосовал). И ваши кавычки, вероятно, поставлены по ошибке. Вы, конечно, имеете в виду строковую переменную, содержащую фактический путь к файлу.
--СА

koolprasadd

Ой, Да. Знаки четверостишия-это опечатка. я их уберу.
спасибо, что просветили меня.

Member 8534726

Я хочу выполнить следующую команду в C#, прямо сейчас я написал ее в bat-файле, но я хочу запустить ее из c#.

\\server-name\directory\PsExec.exe -U домен\пользователь-идентификатор -П ****** -Д-Е cmd.exe /ц \\server-name\directory\file.exe

Sergey Alexandrovich Kryukov

Разве вы не видите, что я ответил полностью? Что еще тебе нужно?
--СА

Member 10257042

PsExec.exe -U домен\пользователь-идентификатор -п ***** \\имя-сервера -Вт "c:\Appp команду" cmd /c призывом тест.летучая мышь