2012-08-09 40 views
2

我開發使用一對夫婦的XML文件來存儲數據的Web應用程序的內容文件。我有自己的生成操作設置爲內容,並在安裝文件被成功複製到應用程序的虛擬目錄:Visual Studio中移動上發佈

C:\inetpub\wwwroot\ApplicationName\ 

我遇到的問題是,寫這些XML文件(以保存設置並這樣的事情)導致了大量的寫權限的問題。因此,要解決它,我試圖將這些文件從他們安裝到C盤下新建一個目錄的虛擬目錄拷貝,在網絡部署項目使用以下PostBuildEvent:

xcopy "$(TargetDir)*.xml" "C:\CompanyName\ApplicationName\" /y 

然而,這什麼都不做。我不知道這是因爲在安裝PostBuildEvents不上安裝實際上解僱,但僅限於建築安裝,或者如果TARGETDIR代表的bin目錄:

C:\inetpub\wwwroot\ApplicationName\bin\ 

,而不是應用程序根虛擬目錄:

C:\inetpub\wwwroot\ApplicationName\ 

有沒有人有任何想法?有沒有人處理這樣的事情之前?我真的很難過這個。

更新: 我包括一個PostBuildEvent應該充分權限的所有用戶:

icacls "$(TargetDir)" /grant Users:F 

但它似乎並沒有已經解決了這個問題。

我也不清楚到底在哪$(TARGETDIR)如果指向,如果這將是.. \應用程序名稱\或.. \應用程序名稱\ BIN \

回答

0

所有你需要做的是充分的權限在其上下文中的Web應用程序池運行用戶。

您可以通過啓動IIS管理器中找到該用戶,並期待在應用程序池身份

喜歡的東西

cacls C:\inetpub\wwwroot\ApplicationName /G Users:F 

會給所有權限這個子目錄中的所有用戶電腦,如果你是ApplicationPoolIndentity下運行是指here

+0

絕對文件路徑並不理想,因爲如果虛擬目錄不存在,安裝程序將拒絕編譯,直到安裝完成纔會進行編譯。有沒有辦法以相對的方式訪問它,比如h $(TargetDir)? – Devo 2012-08-09 19:38:47

+0

我決定使用icacls代替cacls,因爲Visual Studio高興地告訴我cacls已被棄用,我不應該使用它。結果顯示,我感興趣的用戶顯然是ApplicationPoolIdentity,但是在運行命令'icacls c:\ inetpub \ wwwroot \ ApplicationName/grant ApplicationPoolIdentity:F'時出現一個錯誤:'帳戶名和安全ID之間沒有映射'。 – Devo 2012-08-09 20:08:54

+0

@Devo請查看編輯 – 2012-08-10 02:27:15

0

原來有的做什麼,我試圖做一個更簡單的方法。

而不是使用PostBuildEvents創建一個新的目錄結構,有移動的文件,我添加了新的目錄結構爲

InstallerProject > View > File System 

之後,我所在的內容文件從SomeProject在我安裝進入項目,並改變了文件夾值到新指定的目錄結構,在這種情況下

C:\CompanyName\ApplicationName\ 

這似乎工作正常,我現在可以像我原本打算的那樣自由地訪問這些文件。