[英]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.xml
和pro2.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.