我遇到了一个问题,当我在 Windows 7 中为我的应用程序固定一个任务栏图标时,单击该图标会为该程序打开一个单独的(重复)图标,而不是将其与用于调用它的快捷方式分组。
应用程序本身是一个 .jar 文件,它使用 Launch4j 打包到一个 .exe 中。这可以解释为什么图标会重复——Launch4j 正在调用 javaw.exe 的单独进程,当您开始执行此类操作时, AppModelUserID看起来会变得混乱。
根据这篇文章,解决方案是通过一些本机代码指定您的AppModelUserID 。根据那里给出的示例,我成功地在我的应用程序中调用了 JNA 代码,看来我正在将其正确设置为“MyCompany.MyApp”形式的值。调用“get”函数会返回我为它设置的值,因此在应用程序端一切似乎都正常。
...但这就是解决方案停止的地方!我不认为这是它的结束,因为它肯定不能解决我的问题!似乎还需要一个已创建的具有相同 AppModelUserID的快捷方式——这是我对 MSDN 文档的解释。
因为我使用NSIS作为我的安装程序,所以我使用WinShell插件在安装时设置应用程序快捷方式的属性。具体来说,该调用反映了以下示例:
WinShell::SetLnkAUMI "$SMPrograms\MyApp\MyApp.lnk" "${MyApp_AppUserModelId}"
那是我拖到任务栏的那个……但同样,没有骰子。该应用程序仍以单独的固定图标打开。此时,我无法检查是否正确设置了快捷方式属性,因为似乎没有工具可以检查给定快捷方式的AppModelUserID是什么。
当我直接创建一个指向 .jar 文件的快捷方式时,一切正常,但是尝试将 JRE 安装到 NSIS 会很麻烦,而且我已经经历过并试图避免的大量其他令人头疼的问题。
我非常感谢任何可以帮助我解决这个烦人的问题的指导!我总是被这些愚蠢的小美学问题所困扰,这些问题很难解决……
谢谢!
编辑:在我无法验证快捷方式的 AppModelUserID 实际上设置正确后,通过切换到NSIS的ANSI版本解决了问题,正如 Anders 所建议的那样。