2011-10-03 133 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来检查提供程序和提供程序路径,从而在代码中执行上述检查。