WiX和ARP安装位置

WiX和ARP安装位置,wix,windows-installer,wix3.7,Wix,Windows Installer,Wix3.7,我希望我的MSI包将值InstallLocation写入HKEY\U LOCAL\U MACHINE\SOFTWARE\\(Wow6432Node)\Microsoft\Windows\CurrentVersion\Uninstall\\(GUID)。您还应该在“添加/删除程序”控制面板(列Location)中看到此值 为了通过WiX设置这个值,我读到属性arpsInstallLocation应该由一个自定义操作设置。我将减少到最小值。这就是它的样子: <?xml version="1.0

我希望我的MSI包将值
InstallLocation
写入
HKEY\U LOCAL\U MACHINE\SOFTWARE\\(Wow6432Node)\Microsoft\Windows\CurrentVersion\Uninstall\\(GUID)
。您还应该在“添加/删除程序”控制面板(列
Location
)中看到此值

为了通过WiX设置这个值,我读到属性arpsInstallLocation应该由一个自定义操作设置。我将
减少到最小值。这就是它的样子:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Product Id="*" 
           Name="MyApplication"
           Language="1033" 
           Version="!(bind.FileVersion.MyApplication.exe)" 
           Manufacturer="Me"
           UpgradeCode="db37f5dc-68c5-46ee-bbdf-704ff68b70db">
    <Package InstallerVersion="400" Compressed="yes" InstallScope="perMachine" Languages="0" />
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

    <!-- use SetProperty as suggested by Rolo -->
    <SetProperty Id="ARPINSTALLLOCATION" Value="[INSTALLDIR]" After="CostFinalize" />
    <Feature Id="ProductFeature" Title="MyApplication" Level="1">
      <ComponentGroupRef Id="MyApplication.Files.AllRequired" />
    </Feature>
  </Product>
  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLDIR" Name="MyApplication" />
      </Directory>
    </Directory>
  </Fragment>
  <Fragment>
    <ComponentGroup Id="MyApplication.Files.AllRequired">
      <Component Id="ProductComponent" 
                 Guid="90EA8F1C-77D2-40E1-81AD-44B076EFAB9D" 
                 Directory="INSTALLDIR">
        <File Id="MyApplication.exe" Source="$(var.MyApplication.TargetDir)\MyApplication.exe" />
      </Component>
    </ComponentGroup>
  </Fragment>
</Wix>


MSI捆绑在WiX标准引导程序中。

您应该以两种顺序(InstallExecuteSequence和InstallUISequence)执行自定义操作,并在CostFinalize之后对其进行排序

您可以使用以下方法简化此过程:

<SetProperty Id="ARPINSTALLLOCATION" Value="[INSTALLDIR]" After="CostFinalize" />


可能有明显的注释,但如果是按用户安装(请参阅HKCU)或是64位安装,则不会有注释。软件包中有InstallScope=“perMachine”,因此它应该位于HKLM\Software\。。。(或在WOW6432节点中)。在任何情况下,它都应该显示在“添加/删除程序”控制面板的“位置”列中。我更新了上面的代码,以获得完整(但减少)的
@Johannes。请提供安装程序日志的相关部分?操作开始09:15:07:CostFinalize。MSI(0C:6C)[09:15:07:660]:执行操作:SetARPINSTALLLOCATION MSI(0C:6C)[09:15:07:660]:注意:1:2205 2:3:ActionText操作结束09:15:07:CostFinalize。返回值1。MSI(0C:6C)[09:15:07:662]:属性更改:添加ARPINSTALLLOCATION属性。其值为“C:\ProgramFiles(x86)\MyApp\”。操作开始09:15:07:SetARPINSTALLLOCATION。MSI(0C:6C)[09:15:07:663]:执行操作:迁移功能状态MSI(0C:6C)[09:15:07:663]:注意:1:2205 2:3:ActionText操作结束09:15:07:SetARPINSTALLLOCATION。返回值1.`出于某种原因,新行字符在注释中不起作用,我是否要将其添加到问题中?@Johannes您的日志看起来不错,我也在本地测试了您的代码,它起了作用。现在我的问题是。。。你在哪里寻找这个值?我可以在注册表和“程序和功能”(ARP)中看到它。当您处于“程序和功能”中时,将视图更改为“详细信息”,右键单击列的标题,即名称并单击“更多”,然后查找“位置”列并添加它。您将在此处看到该值,否则在窗口底部的摘要中看不到该值。@Johannes在这种情况下,您需要将“Visible=yes”属性添加到MsiPackage元素中。