簡體   English   中英

使用Windows Process備份IIS設置

[英]Backup IIS settings with Windows Process

我可以使用以下命令備份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的Administrator帳戶下運行。我也嘗試添加WorkingDirectory ,但這也沒有幫助。

我使用Process通過WinRar生成一個壓縮文件夾,並且也可以正常工作。

因此,如果有人知道可能是什么大問題。

問題是您在參數中使用'>',這是一個CMD命令,指示它將命令的輸出(在這種情況下為appcmd.exe )寫入指定的文件路徑( C:\\Temp\\iis_config_sites.xml ) 。 當然哪個不appcmd.exe作為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 add backup %backupname% 此命令將添加IIS配置的備份,以后您可以通過restore backup $backupname%來還原它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM