【问题标题】:Pinning a Java application using Launch4j to the Windows 7 taskbar使用 Launch4j 将 Java 应用程序固定到 Windows 7 任务栏
【发布时间】:2012-03-09 16:52:08
【问题描述】:

我目前正在尝试将 Java 应用程序固定到 Windows 7 任务栏。该应用程序使用Launch4j 启动。程序图标显示正确,但右键单击任务栏上的图标仅显示带有条目“关闭窗口”的上下文菜单。没有用于将应用程序固定到任务栏的菜单项。将 EXE 文件拖入任务栏也无法正常工作。在任务栏中单击这个新启动器时,任务栏中会出现第二个图标。

我按照这两个问题的解决方案的说明解决了问题,但没有帮助:

第二个问题/解决方案中的 JNA 内容会编译并且不会引发任何异常。设置后我可以读取应用程序ID。但我仍然无法将应用程序固定到任务栏。

我在 Github 上创建了一个小型测试应用程序来演示该问题:

https://github.com/kayahr/launch4jtest

应用程序使用Maven 作为构建系统。只需运行mvn package,您将在目标目录中找到一个 ZIP 文件,其中包含 EXE 文件和设置此应用程序 ID 所需的 jna.jar。将此 ZIP 解压缩到某个目录,双击 EXE 并尝试将应用程序固定到任务栏,您会看到问题。

那么这个应用程序有什么问题呢?

【问题讨论】:

  • 我已经成功地做到了这一点,但不是通过 Maven 来获得使用 Launch4J 创建的可执行文件。您需要创建一个嵌入 AppUserModelID 信息的图标快捷方式。 InnoSetup 可以在 [Icons] 部分下创建这样的图标快捷方式。提供通过 JNA 分配给 AppUserModelID 的应用程序名称。
  • @eee 问题是:我需要在 Linux 上创建此安装程序,因为在构建期间我无法访问 Windows 机器。 NSIS 有一个插件,但这也只能在 Windows 上运行,因为它直接调用一些 Windows API 调用。即使我设法修改了这些快捷方式:当用户直接启动 EXE 或从 EXE 文件创建自定义快捷方式时会发生什么?然后还是不行。
  • 相反,它仍然可以按任何顺序工作: (1) 它在将 EXE 文件(不是其图标快捷方式)拖放到 Windows 7 任务栏以创建固定图标时工作; (2) 它在运行 EXE 文件并稍后选择“固定到任务栏”选项菜单以创建固定图标时起作用。如果不设置 AppUserModelID,这是不可能的;即使它会导致一个奇怪的行为,比如在任务栏上有 javaw.exe “图标”而不是你的 exe 图标,因为 Launch4J 使用 javaw.exe 调用可执行 jar
  • 要在 Linux 操作系统上运行基于 Windows 的应用程序,您可以使用 wine katastrophos.net/andre/blog/2009/03/16/…

标签: java windows windows-7 taskbar launch4j


【解决方案1】:

我使用 InnoSetup 为我的 java 应用程序创建安装程序。为了使我的应用程序的图标可固定,我做了两个步骤:

  1. 为我的应用设置 AppUserModelID:
  • 从 Maven 添加包:net.java.dev.jna/jna-platform-5.7.0

  • 设置 AppUserModelID

    WString id = new WString("TMP.TestApp");
    Shell32.INSTANCE.SetCurrentProcessExplicitAppUserModelID(id);

  1. 使用 InnoSetup 创建图标时使用 AppUserModelID

    [图标]

    名称:“{commondesktop}\TestApp”;文件名:“{app}\run.bat”;工作目录:“{app}”;图标文件名:“{app}\test-icon.ico”; AppUserModelID: "TMP.TestApp";标志:最小化运行

【讨论】:

    【解决方案2】:

    注意根据 kayahr 的要求,在主帖中重写了一些 cmets :)

    您需要创建一个嵌入AppUserModelID信息的图标快捷方式。 InnoSetup 可以在[Icons] 部分下创建这样的图标快捷方式。提供通过 JNA 分配给 AppUserModelID 的应用程序名称。推荐阅读链接:

    How to make .exe file for izpack installer .jar file

    Launch4j, NSIS, and duplicate pinned Windows 7 taskbar icons

    1. 它在将 EXE 文件(不是其图标快捷方式)拖放到 Windows 7 任务栏以创建固定图标时起作用;
    2. 它在运行 EXE 文件并稍后选择“固定到任务栏”选项菜单以创建固定图标时起作用。如果不设置AppUserModelID,这是不可能的;即使它会导致奇怪的行为,例如在任务栏上使用 javaw.exe “图标”而不是您的 exe 图标,因为 Launch4J 使用 javaw.exe 调用可执行 jar(重复的固定图标)

    要在 Linux 下运行基于 Windows 的安装程序生成器,请参考以下内容:

    http://katastrophos.net/andre/blog/2009/03/16/setting-up-the-inno-setup-compiler-on-debian/

    是的,正如 kayahr 所述,此 Windows 7 功能仅在其嵌入 AppUserModelID 的图标快捷方式保持不变(即未移除/删除)时才有效。

    【讨论】:

    • 需要注意的是,这个方法只有在快捷方式在特定位置可用的情况下才有效!开始菜单。如果您让安装程序在 Program Files 中创建快捷方式(在 .exe 旁边),我可以确认这不起作用。我想弄清楚为什么从 exe 启动时无法固定(我只能通过将快捷方式拖动到任务栏来固定,从 exe 开始固定后没有与固定的快捷方式组合)。值得一提的是,我正在运行一个非管理员用户帐户,这可能与权限有关。
    猜你喜欢
    • 2010-12-22
    • 2012-04-12
    • 2010-11-30
    • 2010-11-18
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2015-10-21
    相关资源
    最近更新 更多