Java 如何从应用程序访问MSI公共属性?

Java 如何从应用程序访问MSI公共属性?,java,wix,windows-installer,javapackager,Java,Wix,Windows Installer,Javapackager,我正在通过javafxpackager使用Wix为我的Java8应用程序构建MSI安装程序。安装时,我可以传递命令行属性,例如: msiexec /i app.msi FOO=BAR 如何从自己的应用程序中访问FOO的值 我已经有了一个自定义wxs文件,javafxpackager正在获取src/main/deploy/package/windows/.wxs,它如下所示 您可以在安装期间将任何公共属性大写写入注册表,然后在运行时使用常规注册表访问机制从应用程序中读回该值,无论开发语言支持

我正在通过javafxpackager使用Wix为我的Java8应用程序构建MSI安装程序。安装时,我可以传递命令行属性,例如:

msiexec /i app.msi FOO=BAR
如何从自己的应用程序中访问FOO的值

我已经有了一个自定义wxs文件,javafxpackager正在获取src/main/deploy/package/windows/.wxs,它如下所示


您可以在安装期间将任何公共属性大写写入注册表,然后在运行时使用常规注册表访问机制从应用程序中读回该值,无论开发语言支持什么结构

属性不会自动保留到注册表中,您需要自己将它们添加到注册表中。也许可以结帐

您需要添加:

<RegistryValue Root="HKLM" 
               Key="SOFTWARE\APPLICATION_VENDOR\APPLICATION_NAME"                                
               Name="Foo" Type="string" Value="[FOO]"/>

到.wxs文件。这将负责在注册表中记录属性,并在升级时重新保存


从Java访问它的各种方法可以在以下网站上找到:

javafxpackager生成WiX配置,但在我的例子中,我已经在手动执行,因为我需要其他自定义。感谢您指出关于/a的内容。我复制并粘贴了我的一个实验命令,但忘了更改它。这不是我想要的,因此,我将我的问题改为使用/I。好的,/a管理安装混淆是很常见的,这就是为什么我添加了解释性链接。我看到你内联了Rob的记忆属性WiX代码。我没有时间去测试它,但它看起来还可以,而且从Rob那里得到的技术上来说,它总是很好的——尽管要做测试。所有安装模式,包括升级。我应该看看javafxpackager——还有一个要检查的列表!唉!:-。取出硬编码的升级代码GUID以防止其被复制/粘贴。如果人们复制您的GUID,理论上他们可能会在自己的安装过程中意外卸载您的产品,反之亦然,您也可能会卸载他们。低风险,但它是存在的-一些代码比其他代码更容易被复制。
<RegistryValue Root="HKLM" 
               Key="SOFTWARE\APPLICATION_VENDOR\APPLICATION_NAME"                                
               Name="Foo" Type="string" Value="[FOO]"/>
<Property Id="FOO">
    <RegistrySearch Id="Foo"
                    Root="HKLM"
                    Key="SOFTWARE\APPLICATION_VENDOR\APPLICATION_NAME"
                    Name="Foo" Type="raw"/>
</Property>