Ошибка формата процесса, appcmd и аргументов. Зачем?
Я получил эту ошибку:Не удалось обработать ввод: параметр 'C:\test.xml' должен начинаться с / или - (HRESULT=80070057).
Я пытаюсь экспортировать свои веб-сайты IIS с помощью appcmd, но я не могу использовать эту команду в C#, но если я скопирую предыдущее руководство в cmd.exe, это сработает. "list site /config /xml > C: \ test.xml", я также пробовал "list site /config /xml > C: /test.xml".
var pro2 = new Process();
pro2.StartInfo.FileName = "C:\Windows\System32\inetsrv\appcmd.exe";
pro2.StartInfo.Arguments = "list site /config /xml > C:/test.xml";
pro2.StartInfo.CreateNoWindow = true;
pro2.StartInfo.UseShellExecute = false;
pro2.StartInfo.LoadUserProfile = true;
pro2.StartInfo.RedirectStandardOutput = true;
pro2.Start();
EventLog.WriteEntry(pro2.StandardOutput.ReadToEnd());
pro2.WaitForExit();
pro2.Close();
Что я делаю не так?
2 ответа
Escape-символы в C#, особенно "\".
Используйте двойную обратную косую черту или @.
Во-первых, вы пытаетесь перенаправить стандартный вывод в два места (
test.xml
а) без тройника . Не будет ничего в
pro2.StandardOutput
.
Во-вторых, Appcmd.exe не обрабатывает параметр перенаправления.
>
, но cmd.exe делает. Вот почему вы можете запустить его из командной строки cmd.exe. Например, это работает в Powershell:
Start-Process cmd.exe -Verb RunAs -ArgumentList "/c","c:\windows\system32\inetsrv\appcmd.exe","list site /config /xml", ">" , "c:\temp\test.xml"
Он отправляет строковый массив из 5 аргументов в
cmd.exe
процесс. Эту строку должно быть довольно легко перевести на C#. Вы можете оставить
-Verb RunAs
если вы работаете в сеансе с повышенными правами или у вас есть разрешение на чтение.