aar*_*rkk 5 java taskbar nsis launch4j windows-7
我遇到一个问题,当我在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}"
Run Code Online (Sandbox Code Playgroud)
那就是我拖到任务栏上的那个……但是同样,没有骰子。该应用程序仍在单独的固定图标中打开。此时,我无法检查是否正确设置了快捷方式属性,因为似乎没有工具可以检查给定快捷方式的AppModelUserID。
当我直接创建直接指向.jar文件的快捷方式时,一切正常,但是尝试将JRE安装到NSIS中却遇到了麻烦,而我已经经历了很多尝试,并且要避免这种麻烦。
我非常感谢任何可以帮助我解决这一困扰问题的指南!我总是被这些愚蠢的小美学问题困扰,这些问题可能很难解决...
谢谢!
编辑:在我无法验证快捷方式的AppModelUserID实际上是否正确设置后,按照Anders的建议,通过切换到NSIS的ANSI版本解决了问题。
在十六进制编辑器中打开 .lnk,AppModelUserId 应存储为 28 4C 9F 79 9F 39 4B A8 D0 E1 D4 2D E1 D5 F3 之后约 15 个字节的 unicode 字符串
除非我的(内部)LNK 转储程序错误,否则 WinShell::SetLnkAUMI 可以正常工作,并且问题可能不在于快捷方式,但为了确定,您应该正常启动应用程序并将其固定到任务栏,然后比较固定的 . lnk ( %APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar) 以及 NSIS 在十六进制编辑器中创建的快捷方式(它们可能不是 100% 相等,但您应该能够在两者中看到您的 AppModelUserId 作为 UTF16LE 字符串)


| 归档时间: |
|
| 查看次数: |
2888 次 |
| 最近记录: |