Как вы запускаете программу, которую вы не знаете, где начинаются аргументы? - PullRequest
2 голосов
/ 21 октября 2008

Субъект не говорит много, потому что в одной строке задать вопрос нелегко. Я должен выполнить несколько программ, которые я читаю из реестра. Я должен читать из поля, где кто-то сохраняет целые пути и аргументы.
Я использую System.Diagnostics.ProcessStartInfo для установки имени программы и ее аргументов, но я нашел широкий спектр аргументов, которые мне нужно проанализировать, чтобы сохранить исполняемый файл процесса в одном поле и его аргументы в другом.

Есть ли способ просто выполнить всю строку как есть?

Ответы [ 3 ]

6 голосов
/ 21 октября 2008

Я справился с этим так же, как на картинке выше, используя cmd.exe с информацией о запуске процесса.

Process myProcess = New Process;
myProcess.StartInfo.FileName = "cmd.exe";
myProcess.StartInfo.Arguments = "/C " + cmd;
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcess.StartInfo.CreateNoWindow = True;
myProcess.Start();
myProcess.WaitForExit();
myProcess.Close();

cmd / c выполняет команду, а затем завершается. WaitForExit завершит процесс, если он будет выполняться слишком долго.

0 голосов
/ 29 апреля 2009

Когда « UseShellExecute » не задано, System.Diagnostics.Process вызывает либо CreateProcess , либо CreateProcessAsUser , чтобы фактически запустить программу (она использует второй если указать пользователя / домен / пароль). И оба этих вызова могут принимать команду и файл как один аргумент. Из MSDN:

Параметр lpApplicationName может быть НОЛЬ. В этом случае имя модуля должен быть первым белым разделенный пробелами токен в Строка lpCommandLine. ...

Имя lpApplication сопоставляется с ProcessStartInfo.Filename, а lpCommandLine сопоставляется с аргументами. Таким образом, вы должны просто пойти:

var processStartInfo = new ProcessStartInfo()
{
    UseShellExecute = false,
    Arguments = cmd
};
Process.Start(processStartInfo);
0 голосов
/ 21 октября 2008

На самом деле их несколько.

  1. Вы можете вызвать cmd.exe с / C [ваша командная строка] в качестве аргументов. Это приводит к тому, что cmd.exe обрабатывает вашу команду и завершает работу.
  2. Вы можете записать команду в командный файл и запустить ее.

И, конечно, есть подход, который вы сейчас используете, а именно анализ командной строки.

...