2011-10-03 154 views
3

我正在使用Web部署API來部署一個Web包(由MSDeploy.exe創建的.zip文件)以編程方式將包卷出到服務器(我們需要在我們發佈軟件包之前做一些其他的事情,這就是爲什麼我們不使用MSDeploy.exe一次性完成這一切)。Web部署API(部署.zip包)說明

這是我的代碼。我的問題是要澄清當執行這個時發生了什麼。在包參數XML文件中,我指定了應用程序名稱(「默認網站」),但是就這一點而言,其中沒有指定其他參數。從測試服務器看來,軟件包得到了成功部署,但我的問題是,我正在部署的服務器上的任何其他設置在我不知情的情況下進行更改,是否有任何默認設置已發佈等。像我可能不知道的安全設置,目錄瀏覽等事情?這裏的代碼似乎部署了這個包,但是當我不確定這個API的工作原理時,我很擔心在生產環境中使用它。 MS文檔沒有幫助(實際上更像是不存在的)。

DeploymentChangeSummary changes; 

string packageToDeploy = "C:/MyPackageLocation.zip"; 
string packageParametersFile = "C:/MyPackageLocation.SetParameters.xml"; 

DeploymentBaseOptions destinationOptions = new DeploymentBaseOptions() 
{ 
    UserName = "MyUsername", 
    Password = "MyPassword", 
    ComputerName = "localhost" 
}; 

using (DeploymentObject deploymentObject = DeploymentManager.CreateObject(DeploymentWellKnownProvider.Package, 
                      packageToDeploy)) 
{ 
    deploymentObject.SyncParameters.Load(packageParametersFile); 
    DeploymentSyncOptions syncOptions = new DeploymentSyncOptions(); 
    syncOptions.WhatIf = false; 

    //Deploy the package to the server. 
    changes = deploymentObject.SyncTo(destinationOptions, syncOptions); 
} 

如果任何人都可以澄清,這段應部署包到一個服務器上的網站應用程序,無需改變任何現有的服務器設置(除非在SetParameters.xml文件中指定),這將是很有益的。任何關於使用API​​的好資源或者關於web部署如何在幕後工作的解釋也將非常感謝!

回答

2

setparameters文件只是控制包中定義的參數的值。一個軟件包可能做得比這更多。 Web部署有一個提供者的概念,任何給定的包可以有一個或多個提供者。

如果你想確保軟件包沒有改變服務器端設置,你可以採取的最好的方法是使用API​​,但通過Web管理服務部署軟件包。這會給你兩個好處:

  1. 你可以控制你允許通過的提供者。
  2. 您可以添加用戶,並給受限制的權限將它們部署到他們的網站或他們的文件夾等

的另一種方法是:

  1. 在包手動看檔案.xml並查找包中的提供程序。只要你沒有看到任何可能導致服務器設置更改的以下提供程序,如apphostconfig或webserver或regkey(這不是一個全面的列表),你應該很好。 Runcommand是允許您執行批處理腳本或命令的提供程序。雖然它是管理員自己的好供應商,但您需要考慮是否要允許使用此類提供者的軟件包運行。

  2. 您可以通過在您創建的部署對象上調用getchildren來檢查提供程序和提供程序路徑,從而在代碼中執行上述檢查。