1

我正在设计一个 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 元素的用途。如果它的目的是创建一个文件夹,顾名思义,嵌套目录不做同样的事情,就像在我的示例代码中一样?而且我认为在那里描述文件夹结构更清楚,因为将 Component 元素(其中将驻留 CreateFolder 元素)和 Directory 元素分开是很常见的。组件将只使用 DirectoryReference 来引用正确的目录。其次,多个组件驻留在同一个目录中也很常见。因此,如果我将 CreateFolder 添加到其中一个组件中,并将默认目录作为这些组件的公共父目录,它甚至意味着什么?这样的结构真的不直观。

4

1 回答 1

2

如您所述, CreateFolder 元素可能具有 Permission 元素,如果未指定目录,它们默认为父组件的目录。所以结构看起来像下面这样。

<Directory Id="INSTALLDIR" Name="$(var.ProductName)">
  <Component>
    <CreateFolder>
      <Permission>
      </Permission>
    </CreateFolder>
  </Component>
</Directory>

但是,根据 Vista 和 Windows 7 的限制以及 Windows 徽标指南,如果您对此仍有疑问,我不会感到惊讶,因为 Program Files 目录已被完全锁定。安装后,您不应写入此目录。

于 2012-07-05T13:59:19.927 回答