﻿# 使用 MSDeploy 部署網站時如何避免變更遠端目錄NTFS權限

由於我們許多專案都用 MSDeploy 進行部署，但最近因為 IIS 伺服器上的架構有所變更，卻引發專案進行部署時發生許多 NTFS 權限上的錯誤，也就是當網站部署之後，連本機系統管理者都無法透過檔案總管進入目錄的窘境，剛花了一個多小時研究，終於找到徹底解決此問題的方法。

**※ ASP.NET 網站專案的發佈方式變更**

**注意**：如果是 **ASP.NET 網站專案** 發佈到 IIS 上，必須先看懂【[ASP.NET 網站專案如何利用 MSDeploy 工具進行部署](/post/2011/06/04/How-to-deploy-ASPNET-WebSite-Project-using-MSDeploy-easily.aspx)】這篇文章的部署方式，然後再看【[使用 MSDeploy 部署網站時如何避免刪除遠端網站的檔案](/post/2011/05/31/Avoid-Delete-Files-on-Remote-Website-using-MSDeploy-tool.aspx)】這篇文章新增指令列參數的方法。因為要避免 msdeploy.exe 設定遠端 IIS 站台目錄的 NTFS 權限，只要加上一個參數即可解決。

假設我們現在的指令如下：

**DemoSite\_Deploy.deploy.cmd /T "/M:https://1.1.1.1:8172/MSDeploy.axd" /U:admin /P:P@ssw0rd -enableRule:DoNotDeleteRule "-setParam:'IIS Web Application Name'='SiteName'" **\-allowUntrusted****

修改過後的指令如下：

****DemoSite\_Deploy.deploy.cmd /T "/M:https://1.1.1.1:8172/MSDeploy.axd" /U:admin /P:P@ssw0rd -enableRule:DoNotDeleteRule "-setParam:'IIS Web Application Name'='SiteName'"** **\-allowUntrusted** "-skip:'objectName'='setAcl'"**

**※ ASP.NET 應用程式專案的發佈方式變更**

如果你的專案類型是 ASP.NET 應用程式，那麼則直接透過修改「專案檔」的方式即可解決此問題，步驟如下：

1\. 先編輯專案檔 ( [Visual Studio Tip: Editing Project Files](https://learn.microsoft.com/en-us/archive/blogs/shawnfa/visual-studio-tip-editing-project-files) **/** [HOW TO：編輯專案檔](http://msdn.microsoft.com/zh-tw/library/ms171487\(v=vs.80\).aspx) )

    如下圖是安裝 [PowerCommands for Visual Studio 2010](http://visualstudiogallery.msdn.microsoft.com/e5f41ad9-4edc-4912-bca3-91147db95b99) 擴充套件才有的選單項目：

    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ef7dc28084ff0a2fc731-image_1709.png)

2\. 選擇一個適當的 <PropertyGroup\> 區段加入以下項目：

```
<IncludeSetAclProviderOnDestination>false</IncludeSetAclProviderOnDestination>
```

   如下圖示：（點圖可放大）

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/32feba6e7e8105d6aa67-image_thumb_101.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/62f64c16b0ca255eeebd-image_1710.png)

設定完成之後，之後透過「單鍵發行」就可以安全的將網站部署到遠端主機了！

**其他研究心得**

經過本次問題處理的過程額外的收穫就是知道 MSDeploy 執行時的身份是 LOCAL SERVICE，所以權限挺大的，可以改本機任意檔案的 NTFS 權限，也因為這樣所以覺得有點困擾，因為部署的時候會把我們原本設定好的目錄權限都覆蓋掉。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c232eebf39a082202522-image_1711.png)

**相關連結**

-   Prevent Visual Studio 2010 and Web Deploy From Changing ACLs
-   [Configuring Parameters for Web Package Deployment](http://www.asp.net/web-forms/tutorials/deployment/web-deployment-in-the-enterprise/configuring-parameters-for-web-package-deployment)
-   [Web Deploy Parameterization in Action](http://vishaljoshi.blogspot.tw/2010/07/web-deploy-parameterization-in-action.html)
-   [Can I retain folder permissions during one-click web publishing?](http://stackoverflow.com/questions/6852155/can-i-retain-folder-permissions-during-one-click-web-publishing)
-   [Problem deploying with Web Deploy and ACLs](http://stackoverflow.com/questions/6477188/problem-deploying-with-web-deploy-and-acls)
-   [Resetting NTFS files security and permission in Windows 7](http://lallousx86.wordpress.com/2009/06/14/resetting-ntfs-files-security-and-permission-in-windows-7/)

-   icacls \* /T /Q /C /RESET

-   [Web Deployment Tool Reference](http://technet.microsoft.com/en-us/library/dd568968\(v=ws.10\).aspx)
-   [MS Deploy Basics](http://raquila.com/software/ms-deploy-basics/)
-   [Microsoft Web Deployment Team Blog](https://blogs.iis.net/msdeploy)
-   [\[VS2010\] ASP.NET 4.0 新功能：MSDeploy 部署 (Web Deployment by MSDeploy)](https://dotblogs.com.tw/regionbbs/2010/01/18/asp_net_4_0_new_feature_msdeploy_web_deployment)
-   [The Will Will Web | 搜尋結果： 'msdeploy'](/search.aspx?q=msdeploy)
