WiX 配置:使用本地应用程序数据路径编辑注册表

WiX configuration: Editing registry with local app data path

我们的 WiX 安装程序配置为通过将以下值添加到某些现有键来编辑注册表:

姓名: "Shell"

值: "{LocalAppData}\MyApplication\MyApplication.exe"

现在我已经硬输入了值,但这显然是非常特定于平台和用户的。

<Component Id="RegistryEntries">
  <RegistryKey 
     Root="HKCU"
     Key="Software\Microsoft\Windows NT\CurrentVersion\Winlogon"
     ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
    <RegistryValue 
        Type="string" 
        Name="Shell" 
        Value="C:\Users\Dave\AppData\Local\MyApplication\MyApplication.exe"/>
  </RegistryKey>
</Component>

如何确定和使用系统的本地应用程序数据文件夹?

我在 Visual Studio 2013 年使用 WiX 3.9。

编辑:

我做了以下操作,它清除了该键的所有注册表值:

<Component Id="RegistryEntries">
  <RegistryKey 
     Root="HKCU"
     Key="Software\Microsoft\Windows NT\CurrentVersion\Winlogon"
     ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
    <RegistryValue 
        Type="string" 
        Name="Shell" 
        Value="[LocalAppData]\MyApplication\MyApplication.exe"/>
  </RegistryKey>
</Component>

为什么会这样?

编辑 2:

没关系,我看到这些属性将强制重新创建整个密钥:

ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes"

您将注册表值创建为 [AppDataFolder] 以将其解析为完整路径。

但是,您似乎需要您可能正在安装的可执行文件的路径,因此更好的方法是该文件的 [#filekey]。

要在 Microsoft Windows 安装程序 WIX 项目期间访问标准目录,请声明正确的 Windows 安装程序目录,然后定义每个子文件夹 - https://msdn.microsoft.com/en-us/library/aa369768(v=vs.85).aspx

  <Directory Id="LocalAppDataFolder">    <!--  C:\Users\[LogonUser]\AppData\Local\  -->
    <Directory Id="Microsoft_FOLDER" Name="Microsoft" ShortName="MICROSOF">                       <!--  C:\Users\[LogonUser]\AppData\Local\Microsoft\  -->
      <Directory Id="InternetExplorer_FOLDER" Name="Internet Explorer" ShortName="INTERNET">     <!--  C:\Users\[LogonUser]\AppData\Local\Microsoft\Internet Explorer\  -->
        <Directory Id="QuickLaunchFolder" Name="Quick Launch"  ShortName="QUICKLAU" />           <!--  C:\Users\[LogonUser]\AppData\Local\Microsoft\Internet Explorer\Quick Launch\    End of QuickLaunchFolder  -->
      </Directory>          <!-- End of InternetExplorer_FOLDER -->
    </Directory>        <!-- End of Microsoft_FOLDER  -->
  </Directory>      <!-- End of LocalAppDataFolder  -->