【问题标题】:Process, appcmd and arguments format error. Why?进程、appcmd 和参数格式错误。为什么?
【发布时间】:2014-03-17 06:17:30
【问题描述】:

我收到了这个错误: 处理输入失败:参数“C:\test.xml”必须以 / 或 - 开头(HRESULT=80070057)。

我正在尝试使用 appcmd 导出我的 IIS 网站,但我无法在 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();

我做错了什么?

【问题讨论】:

    标签: c# windows service arguments appcmd


    【解决方案1】:

    一方面,您试图将标准输出重定向到两个没有tee 的地方(test.xmlpro2.StandardOutput)。 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"
    

    它正在向cmd.exe 进程发送一个包含 5 个参数的字符串数组。将该行转换为 C# 应该很容易。如果您在提升的会话中运行,或者您具有读取权限,则可以不使用 -Verb RunAs

    【讨论】:

      【解决方案2】:

      C# 中的转义字符,特别是“\”。

      使用双反斜杠或@。

      【讨论】:

      • 还是同样的错误。在“-list site /config /xml > C:\\test.xml”中也带有“-” 无法处理输入:参数“C:\\test.xml”必须以 / 或 - 开头(HRESULT=80070057 )。
      • 如果我使用这个命令 "-list site /config /xml > @""C:\\test.xml""" 我得到这个 errpr "Object '>' is not supported. Run ' appcmd.exe /?'显示支持的对象。"
      • 这不起作用:P.StartInfo.FileName = "attrib" P.StartInfo.Arguments = "C:\Program Files\Windows NT\Accessories\wordpad.exe" 但这会:P .StartInfo.FileName = "attrib" P.StartInfo.Arguments = """C:\Program Files\Windows NT\Accessories\wordpad.exe"""
      • HRESULT=80070057 代码可​​能表示“一个或多个参数无效”或“参数不正确”。 blogs.iis.net/robert_mcmurray/archive/2008/10/02/…