Ошибка формата процесса, 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 если вы работаете в сеансе с повышенными правами или у вас есть разрешение на чтение.

Другие вопросы по тегам