【问题标题】:WiX - installer ignoring my "perUser" install scope. Why?WiX - 安装程序忽略我的“perUser”安装范围。为什么?
【发布时间】:2017-05-15 14:22:30
【问题描述】:

我正在尝试构建一个非常简单的安装程序,它只是将软件包安装为“每用户”应用程序。没有对话框,只需始终安装到本地应用程序数据文件夹中。它无视我。并且总是安装到 C:\Program Files。

我已将 InstallScope 设置为“perUser”,但将安装目录保留为“ProgramFilesFolder”。文档似乎建议应该重定向,但这并没有发生。

下面的设置文件...

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*"
         Name="MyApplication"
         Language="1033"
         Version="1.0.0"
         Manufacturer="MyCompany"
         UpgradeCode="19E4E10A-558C-4D4A-BD2A-D6B8060FB917">

    <Package
            InstallerVersion="500"
            Compressed="yes"
            InstallPrivileges="limited"
            InstallScope="perUser" />

    <MajorUpgrade
            DowngradeErrorMessage="A newer version of MyApplication is already installed." />

    <MediaTemplate
            EmbedCab="yes" />

    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLDIR" Name="MyCompany MyApplication">
                <Directory Id="JreFolder" Name="jre"/>
                <Directory Id="LibFolder" Name="lib"/>
            </Directory>
        </Directory>
        <Directory Id="ProgramMenuFolder">
            <Directory Id="ApplicationProgramsFolder" Name="MyCompany MyApplication"/>
        </Directory>
    </Directory>

    <DirectoryRef Id="INSTALLDIR">
        <Component Id="CMP_MyApplication.exe">
            <File Id="FILE_MyApplication.exe" Source="MyApplication.exe" KeyPath="yes"/>
        </Component>
        <Component Id="CMP_MyApplication.ini">
            <File Id="FILE_MyApplication.l4j.ini" Source="MyApplication.l4j.ini" KeyPath="yes"/>
        </Component>
    </DirectoryRef>

    <DirectoryRef Id="ApplicationProgramsFolder">
        <Component Id="CMP_StartMenuShortcut" Guid="0B96A876-70FB-4E8E-8D27-B9B1E40C9B4D">
            <Shortcut Id="ApplicationStartMenuShortcut" Name="MyCompany MyApplication" Description="MyCompany MyApplication"
                      Target="[#FILE_MyApplication.exe]" WorkingDirectory="INSTALLDIR"/>

            <RemoveFolder Id="CleanUpShortCut" Directory="ApplicationProgramsFolder" On="uninstall"/>
            <RegistryValue Root="HKCU" Key="Software\MyCompany\MyApplication" Name="Installed" Type="integer" Value="1" KeyPath="yes" />
        </Component>
    </DirectoryRef>

    <Feature Id="MainApplication" Title="Main Application" Level="1" >
        <ComponentGroupRef Id="JreGroup"/>
        <ComponentGroupRef Id="LibGroup"/>
        <ComponentRef Id="CMP_MyApplication.exe"/>
        <ComponentRef Id="CMP_MyApplication.ini"/>
        <ComponentRef Id="CMP_StartMenuShortcut"/>
    </Feature>
  </Product>
</Wix>

【问题讨论】:

标签: wix


【解决方案1】:

如果您知道要安装到应用数据文件夹,为什么要使用“ProgramFilesFolder”?

这只会让您(或任何其他维护您的代码的人)感到困惑 - 请尝试改用“AppDataFolder”。

【讨论】:

  • 以这种方式显式指定用户配置文件需要您添加一大堆否则无用的 RemoveFile 表条目和注册表项。 ProgramFilesFolder 在每用户安装上下文中应该被重定向到 5.0 中的“应用程序”,但没有。这就是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多