Как передать параметры в exe?

Я использую psexec на своем сервере для запуска исполняемого файла на другом сервере. Как передать параметры другому exe?

Исполняемый файл, который я запускаю на своем сервере, — это psexec, который, в свою очередь, должен запускать исполняемый файл с именем vmtoolsd.exe, расположенный в другой системе. Как передать параметры в vmtoolsd.exe? Кроме того, где я могу передать его? Могу ли я передать его как часть info.Arguments ? Я пробовал это, но это не работает.

ProcessStartInfo info = new ProcessStartInfo(@"C:\Tools");
info.FileName = @"C:\Tools\psexec.exe";
info.Arguments = @"\\" + serverIP + @"C:\Program Files\VMware\VMwareTools\vmtoolsd.exe";
Process.Start(info);

Кроме того, как часть info.Arguments, должен ли я предварять путь vmtoolsd.exe IP-адресом, за которым следует путь к диску?


person spdcbr    schedule 19.04.2015    source источник
comment
Заверните аргументы в ", чтобы избежать проблем с пространством. Arguments это путь, так что вы близко.   -  person SimpleVar    schedule 19.04.2015
comment
@YoryeNathan Должен ли я размещать аргументы сразу после vmtools.exe? Или я должен сделать что-то вроде + аргументы для exe? Я пробовал info.Arguments = @\\ + serverIP + @\C:\Program Files\VMware\VMware Tools\vmtoolsd.exe --cmd info-get guestinfo.test ; , но получаю ошибку. Он принимает аргументы как часть пути. Пишет, что не удалось получить доступ к пути.   -  person spdcbr    schedule 19.04.2015
comment
Я не знаком с psexec. Узнайте, какие аргументы вы хотите отправить, и отправьте их, завернутые в ", разделенные пробелом. У вас есть две проблемы: отправка правильных аргументов и отправка этих правильных аргументов через C#. Сначала решите 1-ю задачу.   -  person SimpleVar    schedule 19.04.2015
comment
@spdcbr как бы вы набрали его в окне командной строки или при запуске -> приглашение на выполнение? Попробуйте это сначала и переведите это.   -  person Alex    schedule 19.04.2015
comment
@Alex Это команда, которую я набираю на сервере, где находится vmtoolsd.exe: C:\Program Files\VMware\VMware Tools\vmtoolsd.exe --cmd info-get guestinfo.test. Я пытался перевести это, но я не уверен, где я иду не так. Первый путь, который я указал как часть аргументов. Я не уверен, как добавить вторую часть этого.   -  person spdcbr    schedule 19.04.2015


Ответы (3)


Надеюсь, что приведенный ниже код может помочь.

Код из первого .exe:

Process p= new Process();
p.StartInfo.FileName = "demo.exe";
p.StartInfo.Arguments = "param1 param2";
p.Start();
p.WaitForExit();

or

Process.Start("demo.exe", "param1 param2");

Код в demo.exe:

static void Main (string [] args)
{
  Console.WriteLine(args[0]);
  Console.WriteLine(args[1]);
}
person Mou    schedule 19.04.2015

Щелкните правой кнопкой мыши файл .exe -> перейти к ярлыку -> в целевой вкладке напишите аргумент в крайнем правом... в моем случае это сработало

person Brijesh Ray    schedule 18.07.2017

Вы можете увидеть это в следующем посте (ответ @AndyMcCluggage):

Как запустить процесс из C#?

using System.Diagnostics;
...
Process process = new Process();
// Configure the process using the StartInfo properties.
process.StartInfo.FileName = "process.exe";
process.StartInfo.Arguments = "-n";
process.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
process.Start();
process.WaitForExit();// Waits here for the process to exit.

Как вы можете видеть в MSDN, он обеспечивает гораздо больший контроль, но в основном управление аргументами, как вы можете видеть, довольно просто, это просто изменить свойство с помощью строки.

Обновление: поскольку с приведенным выше фрагментом кода вы запустите PsExec, основываясь на следующем:

PsExec

Формат, который вы должны использовать:

psexec @run_file [options] command [arguments]

Где: arguments Arguments to pass (file paths must be absolute paths on the target system).

Поскольку процесс, который вы запускаете, это psexec, в process.StartInfo.Arguments вам нужно будет поместить все необходимые параметры в цепочку sigle: @run_file [options] command [arguments].

person Btc Sources    schedule 19.04.2015
comment
В приведенном выше фрагменте кода аргументы будут для exe на моем сервере. Мне нужно передать аргументы исполняемому файлу на другом сервере, который запустит мой исполняемый файл. - person spdcbr; 19.04.2015