2

我正在开发一个使用几个 XML 文件来存储数据的 Web 应用程序。我将他们的构建操作设置为内容,并在安装时将文件成功复制到应用程序虚拟目录:

C:\inetpub\wwwroot\ApplicationName\

我遇到的问题是写入这些 XML 文件(为了保存设置和类似的东西)会导致很多写入权限问题。因此,为了解决这个问题,我尝试使用 Web 部署项目中的以下 PostBuildEvent 将这些文件从它们安装到的虚拟目录复制到 C 驱动器下的新目录:

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) 指向的确切位置,如果它是 ..\ApplicationName\ 或 ..\ApplicationName\bin\

4

2 回答 2

0

您所要做的就是向 Web 应用程序池在其上下文中运行的用户授予完全权限。

您可以通过启动 IIS 管理器并查看Application Pools and Identity列来找到该用户

就像是

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

会将对该子目录的所有权限授予计算机上的所有用户,如果您在ApplicationPoolIndentity参考此处运行

于 2012-08-09T19:09:19.450 回答
0

事实证明,有一种更简单的方法可以做我想做的事情。

我没有使用 PostBuildEvents 创建新的目录结构并将文件移到那里,而是将新的目录结构添加到

InstallerProject > View > File System

之后,我在我的安装程序项目中找到了 SomeProject条目中的内容文件,并将文件夹值更改为新指定的目录结构,在这种情况下

C:\CompanyName\ApplicationName\

这似乎工作正常,我现在可以按照我最初的意图自由访问这些文件。

于 2012-08-10T13:25:10.587 回答