WiX安装程序:修改安装以包括初始安装时跳过的包

WiX安装程序:修改安装以包括初始安装时跳过的包,wix,windows-installer,installation,burn,Wix,Windows Installer,Installation,Burn,我正在使用托管引导程序应用程序构建一个WiX捆绑安装程序。最近,我添加了一个新的msispackage,它在每台机器上安装,但仅在用户选中via复选框时安装。用户可以稍后从“程序和功能”修改安装以安装此软件包。这是捆绑包中仅有的每台机器的软件包。其余的是每个用户。允许在没有提升权限的情况下安装对我们来说是至关重要的,这就是为什么每台机器的软件包是可选的。在修改期间请求提升的权限是可以的 最初,我是这样配置新包的: <MsiPackage Id="optional_package"

我正在使用托管引导程序应用程序构建一个WiX捆绑安装程序。最近,我添加了一个新的
msispackage
,它在每台机器上安装,但仅在用户选中via复选框时安装。用户可以稍后从“程序和功能”修改安装以安装此软件包。这是捆绑包中仅有的每台机器的软件包。其余的是每个用户。允许在没有提升权限的情况下安装对我们来说是至关重要的,这就是为什么每台机器的软件包是可选的。在修改期间请求提升的权限是可以的

最初,我是这样配置新包的:

<MsiPackage Id="optional_package"
            Cache="yes" Compressed="yes" Visible="no"
            DisplayInternalUI="no"
            SourceFile="..\Resources\OptionalPackage.msi" />
这解决了第一个问题,但产生了一个新问题。由于OptionalPackage.msi是每台机器安装的,因此burn尝试将其缓存在
C:\ProgramData\Package cache
(每台机器缓存)中,而不是在
%LocalAppData%\Package cache
(每用户缓存)中。这有两个问题:

  • C:\ProgramData\Package Cache
    是每台计算机的一个位置,需要提升权限。因为我们总是缓存这个新包,所以用户总是需要提升的权限才能安装
  • 在安装过程中,不会弹出UAC对话框请求提升权限。相反,安装程序失败,因为它被拒绝访问
    C:\ProgramData\Package Cache
    。以管理员身份运行是一种解决方法
  • 我怀疑#2是一个burn bug,因为它应该请求访问每台机器缓存的权限。我的问题是,我可以缓存到自定义位置吗?是否可以强制burn将每台机器的包缓存到每用户文件夹?我看不到任何这样做的配置选项


    我试图在这里提供一些上下文,以防有更好的方法来做到这一点。我的总体目标是允许用户通过modify安装第一次安装时跳过的包。如果有更好的方法,请通知我。

    我解决了这个问题,所以我想我应该在这里发布一个答案,让其他人找到。我最终通过按需下载选项包而不是缓存来解决缓存问题。只需设置
    Compressed=“no”
    并设置
    下载URL

    <MsiPackage Id="optional_package"
                Cache="yes" Compressed="no" Visible="no"
                DisplayInternalUI="no"
                SourceFile="..\Resources\OptionalPackage.msi"
                DownloadUrl="https://example.com/download/OptionalPackage.msi" />
    
    
    
    当需要安装软件包时,WiX将自动下载。请记住,
    SourceFile
    定义的文件和
    DownloadUrl
    定义的文件必须完全匹配。WiX散列
    源文件
    ,并将其存储在安装程序中。下载后,它会在
    DownloadUrl
    处对文件进行散列,并且仅当散列匹配时才会安装该文件

    这个解决方案并不理想,因为它需要一个内部连接,但没有其他方法来满足我们的需求。我们的主要问题是,这个.msi是一个每台机器的软件包,我们的安装程序是按用户运行的。我们与FireGiant进行了磋商,并了解了我上述其他几个问题的答案:

  • 无法为来自的包定义缓存位置 在安装程序中。这可以由系统在Windows中配置 用户本地计算机的管理员,但不是由我们在 安装程序
  • 在我描述的情况下,WiX没有请求提升的特权这一事实确实是burn中的一个bug
  • <MsiPackage Id="optional_package"
                Cache="yes" Compressed="no" Visible="no"
                DisplayInternalUI="no"
                SourceFile="..\Resources\OptionalPackage.msi"
                DownloadUrl="https://example.com/download/OptionalPackage.msi" />