3

我正在尝试使用 dirPath 提供程序将 Windows 应用程序部署到远程服务器上的特定路径。我可以使用如下语法将网站毫无问题地部署到同一台服务器:

msdeploy.exe -verb:sync -source=iisApp=C:\SomePath -dest:authType=basic,wmsvc=MyServer,userName=MyUser,password=MyPassword,iis=MySite/MyApp -allowUntrusted

但是,在尝试使用 dirPath 执行类似命令时,出现 401 Unauthorized 错误(原因不明):

msdeploy.exe -verb:sync -source=dirPath=C:\SomePath -dest:authType=basic,wmsvc=MyServer,userName=MyUser,password=MyPassword,dirPath=C:\SomeRemotePath -allowUntrusted

我发现在这里工作的唯一方法是切换到使用 computerName 语法,如下所示:

msdeploy.exe -verb:sync -source=dirPath=C:\SomePath -dest:authType=basic,computerName=https://MyServer:8172/msdeploy.axd?site=MySite,userName=MyUser,password=MyPassword,dirPath=C:\SomeRemotePath -allowUntrusted

这很好,但 computerName 要求将站点作为查询字符串参数传递,在这种情况下,“MySite”实际上是“默认网站”。鉴于我实际上是使用 MSBuild 文件生成此命令行(并使用 Exec 语句执行它),因此我终生无法弄清楚如何正确转义此处的空格。如果我在 MSBuild 文件中指定 %20(例如 Default%20Web%20Site),它会在执行命令之前将其解析回空格,这会导致语法无效。如果我尝试双重转义(分别转义 %、2 和 0,例如 Default%25%32%30Web%25%32%30Site),我会返回 401 Unauthorized 错误。

那么,是否有一些语法或服务器配置允许我在此命令中使用“wmsvc=[server]”,因为它不需要有问题的(不可避免的?)站点查询参数?或者有人可以告诉我如何在执行上述 MSDeploy 命令的 MSBuild Exec 命令中正确地转义“?site=Default Web Site”?

编辑:在有人建议我将默认网站重命名为没有空格的东西之前,是的,这可行,但我正在尝试找到一种方法来避免这种情况,因为我想要一个可以使用默认名称的通用解决方案任何给定服务器上的 IIS 网站。

4

1 回答 1

1

转义站点参数的正确方法(使用计算机名语法时)来自另一个关于使用 curl 的 SO 帖子,即通过将 % 符号加倍来转义它,例如 Default%25%2520Web%25%2520Site。如果没有办法使用 wmsvc,因此根本不指定站点,这对我有用。

编辑:正如 The Muffin Man 刚刚指出的那样,只需在整个 computerName 参数(包括 Site 查询参数)周围加上引号即可避免需要对站点名称进行任何棘手的转义。

于 2013-03-12T16:21:42.140 回答