Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Launch4j将Java应用程序固定到Windows 7任务栏_Java_Windows_Windows 7_Taskbar_Launch4j - Fatal编程技术网

使用Launch4j将Java应用程序固定到Windows 7任务栏

使用Launch4j将Java应用程序固定到Windows 7任务栏,java,windows,windows-7,taskbar,launch4j,Java,Windows,Windows 7,Taskbar,Launch4j,我目前正在尝试将Java应用程序固定到Windows7任务栏。该应用程序是通过以下方式启动的。程序图标显示正确,但右键单击任务栏上的图标仅显示带有“关闭窗口”条目的上下文菜单。没有用于将应用程序固定到任务栏的菜单项。将EXE文件拖动到任务栏也无法正常工作。在任务栏中单击此新启动器时,任务栏中会出现第二个图标 我按照这两个问题的解决方案的说明来解决问题,但没有帮助: 第二个问题/解决方案中的JNA内容是编译的,不会引发任何异常。设置后,我可以读取应用程序id。但我仍然无法将应用程序固定到任

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

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

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

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

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


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

N.B.按照kayahr的要求,重写了最初在主要帖子中的一些评论:)

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

  • 将EXE文件(而不是其图标快捷方式)拖放到Windows 7任务栏中以创建固定图标时,它会起作用
  • 当运行EXE文件并在以后选择“将其固定到任务栏”选项菜单以创建固定图标时,它会工作。如果未设置AppUserModelIDAppUserModelID,则这是不可能的;甚至它也会导致一种奇怪的行为,比如在任务栏上显示javaw.exe“icon”,而不是您的exe图标,因为Launch4J使用javaw.exe(重复的固定图标)调用可执行jar
  • 要在Linux下运行基于Windows的installer builder,请参考以下指南:


    是的,正如kayahr所提到的,只有当带有嵌入式AppUserModelID的图标快捷方式保持不变(即未被删除/删除)时,此Windows 7功能才会工作。

    我使用InnoSetup为我的java应用程序创建安装程序。要使我的应用程序图标可锁定,请执行两个步骤:

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

    • 设置AppUserModelID

      WString id=新的WString(“TMP.TestApp”)
      setCurrentProcessExpliciticTappUserModelId(id)

  • 使用InnoSetup创建图标时使用AppUserModelID

    [图标]

    名称:“{commondesktop}\TestApp”;文件名:“{app}\run.bat”;工作目录:“{app}”;IconFilename:“{app}\test icon.ico”;AppUserModelID:“TMP.TestApp”;标志:runminimized


  • 我已经成功地做到了这一点,但不是通过Maven为使用Launch4J创建的可执行文件。您需要创建一个嵌入AppUserModelID信息的图标快捷方式。InnoSetup可以在[Icons]部分下创建这样的图标快捷方式。提供通过JNA分配给AppUserModelID的应用程序名。请参阅和@eee问题是:我需要在Linux上创建此安装程序,因为我在构建期间无法访问Windows box。NSIS有一个插件,但它也只在Windows上运行,因为它直接调用一些Windows API调用。即使我设法修改了这些快捷方式:当用户直接启动EXE或从EXE文件创建自定义快捷方式时会发生什么?相反,它仍然以任何顺序工作:(1)将EXE文件(不是其图标快捷方式)拖放到Windows 7任务栏中以创建固定图标时,它会工作;(2) 当运行EXE文件并在以后选择“将其固定到任务栏”选项菜单以创建固定图标时,它会工作。如果未设置AppUserModelID,则无法执行此操作;即使它会导致一种奇怪的行为,比如在任务栏上显示javaw.exe“icon”,而不是您的exe图标,因为Launch4J使用javaw.exe调用可执行jar要在Linux操作系统上运行基于Windows的应用程序,您可以使用wine。应该注意,只有在特定位置有快捷方式时,此方法才有效!开始菜单。如果让安装程序在程序文件中创建快捷方式(在
    .exe
    旁边),我可以确认此操作不起作用。我一直在绞尽脑汁试图弄清楚为什么从exe启动时无法锁定(我只能通过拖动快捷方式锁定到任务栏,因为从exe启动时锁定不会与锁定的快捷方式分组)。值得一提的是,我正在运行一个非管理员用户帐户,这可能与权限有关。