Как я могу передать более одного аргумента командной строки через C # - PullRequest
7 голосов
/ 26 апреля 2010

Мне нужно передать более одного аргумента командной строки через c # для процесса под названием handle.exe: http://www.google.com.mt/search?sourceid=chrome&ie=UTF-8&q=handle.exe

Сначала мне нужно запустить исполняемый файл через разрешения ADMINISTRATOR. Этот пост помог мне достичь именно этого: программно запустить cmd.exe как администратор в Vista, c #

Но затем возникает следующая проблема вызова фактических строковых аргументов, таких как «-p explore»

Как указать аргументы командной строки вместе или, может быть, последовательно?

Текущий код выглядит следующим образом:

        Process p = new Process();
        ProcessStartInfo processStartInfo = new ProcessStartInfo("filePath");
        processStartInfo.CreateNoWindow = true;
        processStartInfo.UseShellExecute = false;
        processStartInfo.RedirectStandardOutput = true;
        processStartInfo.RedirectStandardInput = true;
        processStartInfo.Verb = "runas";
        processStartInfo.Arguments = "/env /user:" + "Administrator" + " cmd";

        p.StartInfo = processStartInfo;
        p.Start();
        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();
        Console.WriteLine(output);      

Спасибо

Ответы [ 3 ]

1 голос
/ 27 апреля 2010

Я думаю, что вы ищете ответ прямо из документации команды Runas .

runas /user:user@domain.microsoft.com "notepad my_file.txt" 

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

Так что в вашем примере вы можете сделать следующее.

processStartInfo.Arguments = "/env /user:" + "Administrator" + " \"cmd -p explore\"";
0 голосов
/ 26 апреля 2010

Если вы пытаетесь запустить процесс с повышенными разрешениями, может быть лучший способ, чем вызывать runas.

0 голосов
/ 26 апреля 2010

Вы можете запустить процесс с помощью команды UseShellExecute и передать имя пользователя и пароль

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.useshellexecute%28v=VS.100%29.aspx

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.username%28v=VS.100%29.aspx

Хотя вы будете хранить имя пользователяи пароль где-нибудь.

...