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 -->
我们的 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 -->