我正在设计一个WIX 3.6安装程序项目,在安装过程中我们需要为用户创建安装文件夹的文件权限(INSTALLDIR,特别是使用默认安装文件夹,Program Files,用户通常无法创建文件在安装中。我们遇到了一些失败)。我想这可以通过使用CreateFile属性设置Permission元素来实现。但是,INSTALLDIR是一个目录,只有CreateFolder,File,FileShare,Registry,ServiceInstall等元素才能拥有权限元素。所以有人能告诉我该怎么做吗?我的目录声明是这样的:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles64Folder">
<Directory Id='MANUFACTUREFOLDER' Name='$(var.ManufacturerName)'>
<Directory Id="INSTALLDIR" Name="$(var.ProductName)">
谢谢!
更新: 现在我已经设法创建了一个文件(不是已部署的文件。但是生成的文件基于一个已部署的文件,并且它是在提交阶段的自定义操作中生成的)。但是,我现在在删除刚刚描述的部署文件时遇到问题(因为在成功生成其他文件后没有使用它)。当安装文件夹是Program Files时,我无法在自定义操作中删除它。它说拒绝访问。
另一件事是,我真的不明白CreateFolder元素的目的。如果它的目的是创建一个文件夹,顾名思义,不要嵌套Directory做同样的事情,就像在我的示例代码中一样?我认为在那里描述文件夹结构更为清晰,因为将Component元素(CreateFolder元素将驻留在其中)和Directory元素分开是很常见的。 Component只使用DirectoryReference来引用正确的目录。其次,多个组件驻留在同一目录中也很常见。因此,如果我将CreateFolder添加到其中一个组件中,并将默认目录作为这些组件的公共父目录,它甚至意味着什么?这种结构真的不直观。
答案 0 :(得分:1)
如您所述,CreateFolder元素可能具有Permission元素,如果未指定目录,则它们默认为父组件的目录。所以结构看起来如下所示。
<Directory Id="INSTALLDIR" Name="$(var.ProductName)">
<Component>
<CreateFolder>
<Permission>
</Permission>
</CreateFolder>
</Component>
</Directory>
但是,基于Vista和Windows 7限制以及Windows徽标指南,如果您仍然遇到此问题,我不会感到惊讶,因为Program Files目录已被锁定。安装后,您不应该写入此目录。