The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

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

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

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

注意:如果是 ASP.NET 網站專案 發佈到 IIS 上,必須先看懂【ASP.NET 網站專案如何利用 MSDeploy 工具進行部署】這篇文章的部署方式,然後再看【使用 MSDeploy 部署網站時如何避免刪除遠端網站的檔案】這篇文章新增指令列參數的方法。因為要避免 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 / HOW TO:編輯專案檔 )

    如下圖是安裝 PowerCommands for Visual Studio 2010 擴充套件才有的選單項目:

   

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

<IncludeSetAclProviderOnDestination>false</IncludeSetAclProviderOnDestination>

   如下圖示:(點圖可放大)

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

 

其他研究心得

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

 

相關連結