如何在安装中使WIX创建文件到Program Files文件夹?我有“访问定义”

时间:2012-07-09 08:38:29

标签: windows-7 installation wix access-denied

我正在创建一个WIX安装程序项目。在一个托管的自定义操作期间,我需要在安装文件夹中创建一个文件(除了WIX组件中指定的已部署文件),默认情况下是Program Files文件夹。我在Windows 7中遇到“拒绝访问”问题。经过一些搜索,我发现有人说不建议在Program Files文件夹中创建文件。相反,尝试将文件创建为例如AppData文件夹。例如,请看这个链接: C# Access denied to path in a Windows Application

但我的问题是,生成的文件对我们的SW至关重要,因此它必须位于安装文件夹中。是不是SW安装的目标,我的意思是,在大多数情况下创建文件Program Files文件夹?这是否意味着在安装过程中应该将唯一的文件添加到安装文件夹中,是部署的文件(基本上是XCopy的目标)?

我的文件无法在WIX中部署,即在安装之前无法使其准备就绪。那么处理这种情况的正确方法或最佳实践是什么:必须在安装期间将文件生成到安装文件夹中。它不是我可以放在其他地方的一些日志文件。我尝试在WIX中为INSTALLADIR创建一个Permission元素,虽然它似乎违反了链接中提到的规则,但它仍然失败了。谢谢!

更新:

基于MichaelUrman的一个评论,更多信息。在安装SW之后需要生成的文件,并且在SW的正常启动期间是必需的。我认为在安装后的正常使用过程中需要对其进行修改。当我提到我对@caveman_dick回答的评论时,我的CA实际上处于提交阶段,我不知道它与正常延期CA之间是否存在任何差异

2 个答案:

答案 0 :(得分:3)

将自定义操作设置为Execute="deferred",这将运行提升的命令,并为其提供创建文件所需的权限。

答案 1 :(得分:1)

由于您需要从主应用程序更新该文件,并且我假设您的应用程序不需要提升权限,因此您有三个选项。

  1. 第一个是最差的:没有清单,您的可执行文件尝试写入Program Files文件夹通常会导致它被重定向到虚拟商店(请参阅File Virtualization)。听起来这种情况不会发生在您的情况下,因此您无法使用它。
  2. 第二个选项是修改应用程序以将其存储在适当的位置,例如ProgramData文件夹或Common Documents,或者(如果适用)LocalAppData下的每用户位置。这通常是最好的方法,但开发成本最高。
  3. 最后,第三个选项是创建文件并更改其权限(或在某些情况下更改包含该文件的文件夹的权限),允许有限的用户修改此文件。有关Windows Installer的方法,请参阅LockPermissions或MsiLockPermissionsEx。如果使用此选项,请尽可能少地更改尽可能少的文件或文件夹的权限,以使系统尽可能安全。