5

我遇到了一个问题,当我在 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 所建议的那样。

4

2 回答 2

2

在十六进制编辑器中打开 .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 字符串)


WinShell+lnk 转储


十六进制 LNK

于 2011-03-26T00:04:24.237 回答
1

该库声称它可以使用正确的图标和名称正确地将 Java 应用程序固定到 Windows 7 任务栏...

http://www.strixcode.com/j7goodies/

见微软解释:

http://blogs.technet.com/b/deploymentguys/archive/2009/04/08/pin-items-to-the-start-menu-or-windows-7-taskbar-via-script.aspx

SO中的解决方案:使用JNA获取/设置应用程序标识符

编辑:

似乎InnoSetup从 5.3.5 版开始通过在[Icons]AppUserModelID部分下的条目中使用参数来提供对 Windows 7 Jump List 的支持......这确实是这个恼人问题的救命稻草......

下面的代码仍然需要告诉 Windows 7 这个应用程序进程与AppUserModelIDInnoSetup 创建的 Windows-7 兼容快捷方式共享相同

//name: must match AppUserModelID name set in an entry under [Icons] section
shell32.SetCurrentProcessExplicitAppUserModelID(name);

使用此 InnoSetup 功能,它会在检测到相同的 AppUserModelID 名称时自动允许固定和分组。

http://copyandpastecode.blogspot.com/2010/07/windows-7-jump-list-not-appearing-on.html

于 2011-03-26T00:27:24.953 回答