c# - 使用 Windows 进程备份 IIS 设置

标签 c# windows iis

我可以用下面的命令备份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 的参数。

你有两个选择:

  1. 使用方法如下,相当于在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 中键入的相同命令。

  2. 使用 appcmd.exe 提供的另一个选项来备份 IIS,避免将输出重定向到文件。命令是 appcmd.exe 添加备份 %backupname%。此命令添加 IIS 配置的备份,稍后您可以通过 restore backup $backupname% 恢复它。

关于c# - 使用 Windows 进程备份 IIS 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57241713/

相关文章:

c# - 在 Visual Studio 2010 中调试时如何设置 IIS?

c# - 使用 TcpClient 向服务器发送请求

c# - 使用 Rx 同步异步事件

node.js - npm 在 Windows 中不被识别为内部或外部命令

asp.net - 为什么我的 ASP.NET 4.0 Web 服务因 NetworkService 编译错误而失败,但 LocalSystem 成功

asp.net - 是否有规范/RESTful 方式在 GET 期间将查询详细信息发送到服务器?

c# - 表单例份验证 没有 ASP.net 只是 C# 和 MYSQL

c# - 现有 Asp.Net core 应用程序中缺少 Azure Active Directory 连接服务的身份验证

linux - netbeans 不会从远程计算机(linux)读取编译所需的 .bashrc

c - 在单独的 session 中运行应用程序?