gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:41:54 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com