在我们的 WIX 安装程序项目中,我们需要生成一个新文件,我们称之为 FileB,基于已部署的文件,在托管自定义操作函数中称为 FileA。换句话说,在组件声明中,我声明了 FileA。在自定义操作中(发生在提交阶段),我需要基于 FileA 生成 FileB。之后,由于 FileA 不再使用,我想在同一个自定义操作中将其删除。
问题来了:使用默认安装文件夹,即 Program Files,普通用户不允许在自定义操作中将文件(生成 FileB)添加到此文件夹中(我不是 100% 确定我是对的,但它在我的测试中是这样的。如果我将它安装在另一个文件夹中,则完全没有问题)。所以我认为我需要授予创建文件的权限。为此,我向包含 FileA 的组件添加了一个 CreateFolder 元素。整个组件声明是这样的:
<Component Id='COMPONENT_NAME' Guid='MY_GUID'>
<!--OTHER FILES IN THE COMPONENT-->
...
<CreateFolder Directory='INSTALLDIR'>
<Permission CreateFile='yes' User='Everyone' GenericAll='yes' Delete='yes'/>
</CreateFolder>
<File Id='MyFileA' Name='FileA' Source='PATH_TO_FILEA' KeyPath='no' >
<Permission GenericAll='yes' User='Everyone' Delete='yes'/>
</File>
</Component>
该组件实际上属于一个组件组,该组位于 INSTALLDIR 中。同一组件元素中还有其他文件的原因是因为我希望另一个 File 作为 keypath,因此删除 FileA 不会导致问题。现在 FileB 的生成工作正常。但后来在同一个自定义操作中,我在删除 FileA 时遇到了问题。它只是说“:拒绝访问路径'DEPLOYMENT_PATH_TO_FILEA'。” 我认为问题出在 FileA 声明中,这就是为什么我在 File 下的 Permission 元素中添加了 Delete='yes' ,希望可以删除它(虽然我不确定这是否意味着在安装中可以删除)。但我仍然收到此错误。谁能告诉我我做错了什么?
另一个问题是,我真的不知道那些 CreatFolder 元素的目的是什么。一方面:如果目标是创建目录结构,我认为(嵌套)目录元素已经做到了。以及为什么在大多数时候您可能希望目录结构与组件结构分开时在 Component 元素下有这样的元素(组件只是使用目录引用来引用正确的目录)。其次,CreateFolder 的默认 Directory 属性是组件所在的父目录。但是通常不止一个组件位于同一个目录中,就像我这里的一样:多个组件在同一个组件组中,其目录对 INSTALLDIR 的元素引用。所以这些组件中只有一个具有 CreateFolder 元素,在我的例子中,它的 Directory 属性是所有这些组件的父目录。这种结构真的很难理解。我想我对 CreateFolder 元素有一些误解。有人可以启发我使用 CreateFolder 吗?谢谢!
谢谢!