【发布时间】:2011-07-23 06:12:08
【问题描述】:
我遇到了一个问题,当我在 Windows 7 中为我的应用程序固定一个任务栏图标时,单击该图标会为该程序打开一个单独的(重复)图标,而不是将其与用于调用它的快捷方式分组。
应用程序本身是一个 .jar 文件,它使用 Launch4j 打包成一个 .exe。这可以解释为什么图标会重复——Launch4j 正在调用 javaw.exe 的单独进程,当您开始执行此类操作时,看起来 AppModelUserID 会感到困惑。
根据this post,解决方法是通过一些原生代码指定你的AppModelUserID。根据那里给出的示例,我成功地在我的应用程序中调用了 JNA 代码,看来我正在将其正确设置为“MyCompany.MyApp”形式的值。调用“get”函数会返回我为其设置的值,因此在应用程序端一切正常。
...但这就是解决方案停止的地方!我不认为这是它的结束,因为它肯定不能解决我的问题!似乎 also 需要的是已创建的具有 same AppModelUserID 的快捷方式——这是我对 MSDN 文档的解释。
由于我使用 NSIS 作为我的安装程序,我使用WinShell 插件在安装时设置应用程序快捷方式的属性。具体来说,该调用反映了以下示例:
WinShell::SetLnkAUMI "$SMPrograms\MyApp\MyApp.lnk" "${MyApp_AppUserModelId}"
那是我拖到任务栏的那个……但同样,没有骰子。该应用程序仍以单独的固定图标打开。此时,我无法检查是否正确设置了快捷方式属性,因为似乎没有工具可以检查给定快捷方式的 AppModelUserID 是什么。
当我直接创建一个指向 .jar 文件的快捷方式时,一切正常,但是尝试将 JRE 安装到 NSIS 会很麻烦,而且我已经经历过并试图避免的大量其他问题.
如果有任何指导可以帮助我解决这个烦人的问题,我将不胜感激!我总是被这些愚蠢的小美学问题所困扰,解决起来很痛苦......
谢谢!
编辑:按照 Anders 的建议,切换到 NSIS 的 ANSI 版本解决了问题在我无法验证快捷方式的 AppModelUserID 实际上设置正确之后。
【问题讨论】:
-
Launch4j 或 java.exe 是具有任务栏按钮的窗口的所有者吗?
-
@Anders 我会说它是 javaw.exe,因为这是运行原始程序 .exe 后出现的唯一进程。 Launch4j 只是生成一个包装 .jar 的小 .exe,然后我想执行 javaw 以实际运行原始 .jar 文件。这似乎意味着我试图解决的问题是不可能的,因为我无法控制 javaw.exe 的 AppUserModelID,对吧?那会有点糟糕......
标签: java windows-7 nsis taskbar launch4j