WixToolset v4 - 在没有提升权限的情况下,范围为“perUser”的安装失败

问题描述 投票:0回答:1

我有一个小应用程序,我为其进行了 wix 3 设置,将其安装到本地 AppData 文件夹。这从来不需要管理员权限,并且工作完美。

最近我升级到了 Wix 4,它会自动将 wxs 文件转换为 Wix 4 格式。但现在它开始要求提升权限来安装安装程序。我向其中添加了 Scope="perUser" 以避免它要求提升权限,但现在安装失败并出现错误

错误 0x80070005:无法保护缓存路径:C:\ProgramData\Package Cache
错误 0x80070005:无法保护缓存目录:C:\ProgramData\Package Cache
错误 0x80070005:无法保护每台计算机缓存根。 无法准备包:NetFx462Redist,错误:0x80070005 错误 0x80070005:缓存准备包失败:NetFx462Redist 错误 0x80070005:缓存时失败,中止执行。

为什么会发生这种情况以及如何避免这种情况?

这是我的产品.wxs

<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
  <?include common.wxi ?>
  
  <Package Name="$(var.PRODUCT) $(var.VERSION)" UpgradeCode="$(var.UPGRADECODE)" Language="1033" Codepage="1252" Version="$(var.VERSION)" Manufacturer="$(var.MANUFACTURER)" InstallerVersion="200" Scope="perUser">
    <SummaryInformation Keywords="Installer, MSI, Package" Manufacturer="$(var.MANUFACTURER)" />

    <MajorUpgrade Schedule="afterInstallInitialize" DowngradeErrorMessage="$(var.DOWNGRADEERRORMESSAGE)" />
    <MediaTemplate EmbedCab="yes" />
    <Property Id="ApplicationFolderName" Value="$(var.MANUFACTURER)\$(var.PRODUCT)" />

    <Feature Id="DefaultFeature" Level="1">
        <ComponentRef Id="INSTALLDIRComponent" />
    </Feature>
  
      <StandardDirectory Id="LocalAppDataFolder">
        <Directory Id="INSTALLDIR" Name="MyApp">
        
          <Component Id="INSTALLDIRComponent" Guid="$(var.INSTALLDIRGUID)" Bitness="always64">
            <File Id="___var_MyApp.exe" Source="$(var.MyApp.TargetDir)MyApp.exe" />
            <File Id="mainExecutableFile" Source="$(var.MyApp.TargetDir)MyApp.Launcher.exe" />

            <RegistryValue Root="HKCU" Key="Software\MyApp\MyApp" Name="Exe" Value="[INSTALLDIR]MyApp.exe" Type="string" />
            <RegistryValue Root="HKCU" Key="Software\MyApp\MyApp" Name="Path" Type="string" Value="[INSTALLDIR]" KeyPath="yes" />

            <RemoveFolder Id="INSTALLDIRfolder" Directory="INSTALLDIR" On="uninstall" />

          </Component>
        </Directory>
      </StandardDirectory>
    
    </Package>
</Wix>

还有 Bundle.wxs

<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal">

  <Bundle Name="MyApp" Version="$(var.Version)" Manufacturer="MyApp" UpgradeCode="97baf4b4-4e07-43bb-9042-df6bf3e29f6e">

    <bal:Condition Message="You’re using an unsupported version of Windows. MyApp requires Windows 7 SP1 or later." Condition="((VersionNT &gt;= v5.1) AND (ServicePackLevel &gt;= 3)) OR ((VersionNT &gt;= v5.2) AND (ServicePackLevel &gt;= 2)) OR ((VersionNT &gt;= v6.1) AND (ServicePackLevel &gt;= 1)) OR (VersionNT &gt;= v6.2)" />
    
    <Variable Name="LaunchTarget" Value="[LocalAppDataFolder]\MyApp\MyApp.Launcher.exe" Type="formatted" />

    <BootstrapperApplication>
      <bal:WixStandardBootstrapperApplication LogoFile="Resources/[email protected]" ThemeFile="Resources/ClassicTheme.xml" LocalizationFile="Resources/ClassicTheme.wxl" LicenseUrl="" Theme="hyperlinkSidebarLicense" />
    </BootstrapperApplication>

    <Chain DisableSystemRestore="yes">
      <PackageGroupRef Id="NetFx462Redist" />
      <RollbackBoundary />
      
      <MsiPackage Id="SetupAdmin" Compressed="yes" SourceFile="$(var.MSIInstaller.TargetDir)MyApp.msi" Vital="yes">
        <MsiProperty Name="INSTALLLOCATION" Value="[INSTALLDIR]" />
        <MsiProperty Name="BUNDLEKEY" Value="[WixBundleProviderKey]" />
      </MsiPackage>
    </Chain>
  </Bundle>
</Wix>
wix wix3 wix4
1个回答
0
投票

NetFx462Redist
可能被标记为始终缓存(v4 中的新功能),因此 Burn 希望缓存它。这是每台计算机的包,因此 Burn 应该需要提升才能缓存每台计算机的包。但是,您的捆绑包现在总体上是针对每个用户的(因为每个用户包),因此 Burn 可能会跳过提升。很难说,因为您只提供了日志文件的一个片段。

如果我的猜测是正确的,这可能是 Burn 中的一个错误。但我可能会错过一些东西。您可能应该调试 Burn 才能确定。

© www.soinside.com 2019 - 2024. All rights reserved.