1

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

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

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

更新:

基于 MichaelUrman 的评论,提供更多信息。生成的文件是软件安装后需要的,软件正常启动时需要的。而且我认为在安装后的正常使用过程中需要对其进行修改。正如我提到我对@caveman_dick 答案的评论,我的 CA 实际上处于提交阶段,我不知道它与普通的延迟 CA 之间是否有任何区别

4

2 回答 2

3

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

于 2012-07-09T17:43:10.760 回答
1

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

  1. 第一个是最糟糕的:没有清单,您的可执行文件尝试写入 Program Files 文件夹通常会导致它被重定向到虚拟存储(请参阅文件虚拟化)。听起来这在你的情况下没有发生,所以你不能使用它。
  2. 第二个选项是修改应用程序以将其存储在适当的位置,例如 ProgramData 文件夹或 Common Documents,或(如果适用)LocalAppData 下的每个用户位置。这通常是最好的方法,但开发成本最高。
  3. 最后第三个选项是创建文件并更改其权限(或在某些情况下更改包含该文件的文件夹的权限),允许有限的用户修改此文件。请参阅 LockPermissions 或 MsiLockPermissionsEx 以了解 Windows 安装程序解决此问题的方法。更改尽可能少的文件或文件夹的权限,如果您使用此选项,则尽可能确保系统安全。
于 2012-07-10T12:01:12.913 回答