install4J,如何通过Java首选项存储正确地将'updatesUrl'传递给更新程序?
我正试图根据另一篇文章中的建议为我的应用程序实现多通道(deb/beta/stable)更新 我已完成以下步骤:install4J,如何通过Java首选项存储正确地将'updatesUrl'传递给更新程序?,java,install4j,Java,Install4j,我正试图根据另一篇文章中的建议为我的应用程序实现多通道(deb/beta/stable)更新 我已完成以下步骤: 创建编译器变量mediaID=${compiler:sys.mediaID} 当我的应用程序的用户更改其发布频道首选项时,将调用以下函数:mediaID=Variables.getCompilerVariable(“mediaID”);Variables.saveToPreferenceStore(Map.of(“updatesUrl”,xmlURL),mediaID,true) 当
mediaID=${compiler:sys.mediaID}
mediaID=Variables.getCompilerVariable(“mediaID”);Variables.saveToPreferenceStore(Map.of(“updatesUrl”,xmlURL),mediaID,true)代码>
ApplicationLauncher.launchApplicationInProcess(更新程序\u应用程序\u ID,null,…)
但这会引发错误(退出值=1):updateurl
变量,但就在调用函数之前,我记录了com.install4j.api.launcher.Variables.loadFromPreferenceStore的输出(mediaID,true)代码>我得到的结果是{updatesUrl=https://github.com/akasolace/HO/releases/download/dev/updatesDEV.xml}
这是合法的URL,因此似乎updatesUrl已正确存储
现在,我对这应该如何工作感到有点困惑。例如,我在parralel中运行2版应用程序,我的设置如下:
{(1, "updatesUrl"): "...updatesSTABLE.xml", (2, "updatesUrl"): "...updatesDEV.xml"}
- mediaID 1,释放通道稳定
- MediaID2,发布频道开发
在我的系统上,我将变量updatesUrl
存储在两个不同的包中,类似于:
{(1, "updatesUrl"): "...updatesSTABLE.xml", (2, "updatesUrl"): "...updatesDEV.xml"}
现在,在install4J中,我添加了“从Java首选项存储加载安装程序变量”操作,我看到包名默认为${compiler:sys.applicationId
。这导致了以下问题:
- 我认为applicationID对于应用程序是唯一的,mediaID对于每种媒体都是不同的。为了实现我想要的,我认为我需要更新程序用作包名,即调用它的媒体的媒体ID。我的意思是,如果从媒体ID x调用更新程序,我需要它查看变量“updatesUrl”从x包。这是可行的还是我迷路了
[编辑]我试图将“从Java首选项存储加载安装程序变量”的包名设置为${compiler:sys.mediaId
,但这会引发
提前感谢您的帮助
使用以下堆栈跟踪
java.lang.NullPointerException
com.install4j.runtime.installer.Application.runApplicationInProcess(Application.java:64)
com.install4j.runtime.installer.helper.apiimpl.ApplicationLauncherImpl$1.run(ApplicationLauncherImpl.java:57)
调用com.install4j.api.launcher.Variables.loadFromPreferenceStore
不会设置安装程序变量,它会返回一个带有变量值的映射。这是为了在应用程序中使用
您需要做的是将“从Java首选项存储加载安装程序变量”操作添加到update downloader中的“Startup”节点。这样,updatesUrl
安装程序变量实际上设置为首选项存储的值。这就是我在问题中提到的操作“从Java首选项存储加载安装程序变量”,我看到包名默认为${compiler:sys.applicationId}
仍然是为了调试目的,我配置了“从Java首选项存储加载安装程序变量”“通过对包进行硬编码,我在java首选项存储中存储updatesUrl
时使用的mediaID值为56。在我的应用程序中,如果我调用loadFromPreferenceStore(“56”,true);
在更新之前,我得到{updatesUrl>=https://github.com/akasolace/HO/releases/download/dev/updatesDEV.xml}
这是有效的url,但更新程序仍然无法从存储中加载它,尽管它已硬编码,因为它抛出了我在问题中显示的错误(内部错误…)。错误对话框显示使用的url为空。请尝试将“检查更新”操作的“更新描述符url”属性替换为${installer:updatesUrl}并查看更新下载程序的日志文件输出。我发现了我的错误:“从Java首选项存储加载安装程序变量”操作不在启动节点中。我应该更仔细地阅读文档。我需要更多测试,但到目前为止,它似乎工作正常。非常感谢您宝贵的帮助!