Wix安装程序中的文件夹(在安装期间创建)对所有用户都不可见

时间:2015-05-29 06:59:57

标签: wix windows-installer installer directory wix3.5

我使用wix开发了一个设置,它非常适合管理员登录。但我希望我的应用程序适用于包括admin在内的所有用户。所以我在包中设置了 InstallScope =“perMachine”元件。但是,为了保存一些日志,帮助文档等我正在%appdata%\ ApplicatinName 中创建一个文件夹,并在我的应用程序运行时保存一个日志文件,但最初会创建该文件夹在安装设置期间,它在管理员登录时工作完美,但如果我登录用户帐户,则在用户帐户中该文件夹未在%appdata%路径中创建。

appdata中的我的文件夹(XXX)仅对管理员可见,对其他用户不可见。如何在安装过程中为包括管理员在内的所有用户显示相同的文件夹。

在文件夹中,我的应用程序中有模板,例如,一些模板将与安装程序一起添加,称为预定义模板。这些预定义模板应该对所有用户可见。除此之外,用户也可以创建将保存在同一文件夹下的模板,但用户应该只能看到预定义的模板和用户自己创建的模板。 (即)他不应该看到其他用户创建的模板 问候 艾尔沙德

1 个答案:

答案 0 :(得分:1)

我运行了测试,发现这个WIX片段在安装用户的用户配置文件中成功创建了一个文件夹,该文件夹具有允许其他用户访问该文件夹及其内容的安全设置:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="AppDataFolder" Name="AppDataFolder">
    <Directory Id="MyDataRoot" Name="XXX">
      <Component Id="MyDataRoot" Guid="--MY GUID--">
        <RegistryValue Root="HKCU" Key="Software\Company\Product\SpecialFolder" Name="Installed" Type="string" Value="yes" KeyPath="yes"/>
        <RemoveFolder Id="MyDataRoot" Directory="MyDataRoot" On="uninstall"/>
        <CreateFolder Directory="MyDataRoot">
          <util:PermissionEx GenericAll="yes" User="Users"/>
        </CreateFolder>
      </Component>
    </Directory>
  </Directory>
</Directory>

注意:

  1. 上面的片段为安装用户创建了一个用户配置文件夹,可供其他用户访问。请参阅下面有关此方法的安全隐患的评论。
  2. 实际的GUID已替换为&#34; - MY GUID - &#34;。
  3. 解决错误ICE38需要<RegistryValue...>:组件MyDataRoot安装到用户配置文件。它必须使用HKCU下的注册表项作为其KeyPath,而不是文件。
  4. 解决错误ICE64需要<RemoveFolder...>:目录MyDataRoot位于用户配置文件中,但未在RemoveFile表中列出。
  5. 我使用WIX V3.9构建安装程序包。
  6. 安装程序包已通过在Windows 8.1 64位上安装进行测试。
  7. 但是,从安全角度来看,在其他用户访问的一个用户配置文件中创建目录是有问题的。您是否考虑过在应用程序启动时更改应用程序以创建用户配置文件文件夹,而不是使用安装程序创建用户配置文件文件夹?

    例如,您的应用程序可以使用System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)获取当前用户的应用程序数据文件夹,并在此文件夹中创建一个子文件夹来存储应用程序的日志。此方法可确保应用程序中的日志转到当前用户的应用程序文件夹,而不是其他用户的应用程序文件夹。