#c# #process #netsh
#c# #процесс #netsh
Вопрос:
Я хочу запустить команду NETSH в автоматическом режиме (без окна). Я написал этот код, но он не работает.
public static bool ExecuteApplication(string Address, string workingDir, string arguments, bool showWindow)
{
Process proc = new Process();
proc.StartInfo.FileName = Address;
proc.StartInfo.WorkingDirectory = workingDir;
proc.StartInfo.Arguments = arguments;
proc.StartInfo.CreateNoWindow = showWindow;
return proc.Start();
}
string cmd= "interface set interface name="" InterfaceName "" admin=enable";
ExecuteApplication("netsh.exe","",cmd, false);
Комментарии:
1. Ну, вы переходите
false
наCreateNoWindow
… итак, вы попросили его создать окно.
Ответ №1:
Вот как я это делаю в своем проекте:
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "netsh";
psi.UseShellExecute = false;
psi.RedirectStandardError = true;
psi.RedirectStandardOutput = true;
psi.Arguments = "SOME_ARGUMENTS";
Process proc = Process.Start(psi);
proc.WaitForExit();
string errorOutput = proc.StandardError.ReadToEnd();
string standardOutput = proc.StandardOutput.ReadToEnd();
if (proc.ExitCode != 0)
throw new Exception("netsh exit code: " proc.ExitCode.ToString() " " (!string.IsNullOrEmpty(errorOutput) ? " " errorOutput : "") " " (!string.IsNullOrEmpty(standardOutput) ? " " standardOutput : ""));
Он также учитывает выходные данные команды.
Ответ №2:
Выполнить выполнение пользовательской оболочки false
proc.StartInfo.UseShellExecute = false;
и передать true в showWindow
параметре
ExecuteApplication("netsh.exe","",cmd, true);
Комментарии:
1. Также было бы полезно изменить поведение внутри
ExecuteApplication
. ВshowWindow
настоящее время параметр выполняет прямо противоположное тому, что указывает его имя.