繁体   English   中英

进程、appcmd 和参数格式错误。 为什么?

[英]Process, appcmd and arguments format error. Why?

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

我正在尝试使用 appcmd 导出我的 IIS 网站,但我无法在 C# 中使用此命令,但是如果我在 cmd.exe 中复制过去的手册,它就可以工作。 “列出站点 /config /xml > C:\\test.xml”,我也试过“列出站点 /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# 中的转义字符,特别是“\\”。

使用双反斜杠或@。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM