我可以用下面的命令备份IIS的设置
//sites
C:\Windows\system32\inetsrv\appcmd.exe list site /config /xml > C:\Temp\iis_config_sites.xml
//apppools
C:\Windows\system32\inetsrv\appcmd.exe list apppool /config /xml > C:\Temp\iis_config_apppool.xml
当我从命令提示符运行这些命令时,它工作正常。 XML 文件已创建。但我想通过使用 System.Diagnostics.Process
从 C# 代码执行此命令来自动执行此过程。为此,我使用以下代码
using (Process process = new Process())
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = @"C:\Windows\system32\inetsrv\appcmd.exe";
startInfo.Arguments = @"list site /config /xml > C:\Temp\iis_config_sites.xml";
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
}
但是当我运行这段代码时什么也没有发生。未创建 XML 文件。但是没有错误,也没有警告。执行此命令的程序在 Windows Server 2019 和 IIS 10 的管理员帐户下运行。我也尝试添加 WorkingDirectory
,但这也没有帮助。
我使用 Process
通过 WinRar 生成一个压缩文件夹,也可以正常工作。
因此,如果有人知道可能是什么问题,那就太好了。
最佳答案
问题是您在参数中使用了“>”,这是一个 CMD 命令,指示它将命令(在本例中为 appcmd.exe
)的输出写入指定的文件路径(C:\Temp\iis_config_sites.xml
)。这当然不能用作 appcmd.exe
的参数。
你有两个选择:
使用方法如下,相当于在CMD中执行命令:
startInfo.FileName = @"C:\Windows\system32\cmd.exe"; startInfo.Arguments = "/c \"C:\\Windows\\system32\\inetsrv\\appcmd.exe\" list site /config /xml > C:\\Temp\\iis_config_sites.xml";
请注意,
/c
是 cmd.exe 的命令行选项,将其余参数作为“命令”执行,就像您将其输入命令行窗口一样。其余的只是您通常在 cmd 中键入的相同命令。使用 appcmd.exe 提供的另一个选项来备份 IIS,避免将输出重定向到文件。命令是
appcmd.exe 添加备份 %backupname%
。此命令添加 IIS 配置的备份,稍后您可以通过restore backup $backupname%
恢复它。
关于c# - 使用 Windows 进程备份 IIS 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57241713/