首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从jpackage+wix向Windows app添加快捷方式?

如何从jpackage+wix向Windows app添加快捷方式?
EN

Stack Overflow用户
提问于 2020-02-25 18:33:40
回答 3查看 673关注 0票数 1

我有一个脚本(为了简洁,只是一个简化的摘录)来构建和打包我的应用程序,但它归结为生成WiX安装程序,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jpackage \
    --type msi \
    --dest "$(cygpath -w "${base[build:dist]}")" \
    --name "${appDisplayName}" \
    --app-version "${version}" \
    --app-image "$(cygpath -w "${base[build:app]}")" \
    --license-file "$(cygpath -w resources/app/legal/LICENSE)" \
    --vendor "${vendor}" \
    --verbose \
    --temp 'W:\_tmp_' \
    --win-shortcut;

它失败了,原因是:Command [light.exe, (...)] in (...) exited with 94 code。我找到的是关于未解析的引用,特别是对快捷方式图标...\config\bundle.wxf(10) : error LGHT0094 : Unresolved reference to symbol 'Icon:icon1798580986' in section 'Fragment:'的引用。

当我检查生成的WiX可扩展标记语言时,我发现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Fragment>
  ...
  <DirectoryRef Id="DesktopFolder">
    <Component Win64="yes" Id="cshortcut9906e12cdacb303ebb5e48c888cf6949" Guid="{9906e12c-dacb-303e-bb5e-48c888cf6949}">
      ...
      <Shortcut Id="shortcut9906e12cdacb303ebb5e48c888cf6949" Name="..." WorkingDirectory="INSTALLDIR" Advertise="no" IconIndex="0" Target="[#filed2065cdc42e13
55f8bdbbefc93d540f3]" Icon="icon1798580986"></Shortcut>
    </Component>
  </DirectoryRef>
  ...
</Wix>

而且确实有这个"icon1798580986“值,它没有告诉我任何事情,甚至WiX在这里丢失了(在阅读这个https://stackoverflow.com/a/21019152/2024692之后,我检查并确认我确实在WiX bin文件夹中有WixUIExtension.dll )。

当我删除--win-shortcut选项,然后微星安装程序生成,但不幸的是没有快捷方式图标在桌面上(应用程序有它的适当图标,你,因为我生成的应用程序图像与--icon开关和--resource-dir指向a.o.。应用程序图标)。

正如你可能猜到的,这是从Cygwin中调用的,所以有时它需要摆弄路径,特别是当你调用Windows可执行文件时(因此有这些cygpath的事情)。

好吧,我找不到任何有建设性的方法,如何简单地让我的jpackage (来自JDK-14/15EA,都没有成功)的Java应用程序在安装后拥有漂亮的快捷方式图标。有人知道怎么解决这个问题吗?提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2020-03-04 19:48:12

使用gradle插件更容易实现

您需要设置正确的图标文件路径并具有有效的.ico文件。我是这样做的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jlink {
    options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
    launcher {
        name = 'PDF Decorator'
        jvmArgs = ['-Djdk.gtk.version=2'] // required due to a bug in Java: https://github.com/javafxports/openjdk-jfx/issues/175
    }
    jpackage {
        installerOptions = [
            '--description', project.description,
            '--copyright', 'Copyrigth 2015-2019 WALCZAK.IT'
        ]
        installerType = project.findProperty('installerType') // we will pass this from the command line (example: -PinstallerType=msi)
        if (installerType == 'msi') {
            imageOptions += ['--icon', 'src/main/resources/pdfdecorator/gui/icon.ico']
            installerOptions += [
                '--win-per-user-install', '--win-dir-chooser',
                '--win-menu', '--win-shortcut'
            ]
        }
        if (installerType == 'pkg') {
            imageOptions += ['--icon', 'src/main/resources/pdfdecorator/gui/icon.icns']
        }
        if (installerType in ['deb', 'rpm']) {
            imageOptions += ['--icon', 'src/main/resources/pdfdecorator/gui/icon_256x256.png']
            installerOptions += [
                '--linux-menu-group', 'Office',
                '--linux-shortcut'
            ]
        }
        if (installerType == 'deb') {
            installerOptions += [
                '--linux-deb-maintainer', 'office@walczak.it'
            ]
        }
        if (installerType == 'rpm') {
            installerOptions += [
                '--linux-rpm-license-type', 'GPLv3'
            ]
        }
    }
}

这里有一篇文章,介绍了如何使用OpenJDK 11和OpenJDK 14以及jpackage来构建应用程序镜像,只用于构建安装程序/包:https://walczak.it/blog/distributing-javafx-desktop-applications-without-requiring-jvm-using-jlink-and-jpackage

票数 2
EN

Stack Overflow用户

发布于 2020-06-09 18:09:41

您刚刚享受到了约定胜过配置的好处

当使用jpackage、--app-image--win-shorcut参数时,jpackage期望在app-image目录的根目录中找到可执行文件和图标来创建快捷方式。可执行文件和图标的名称必须与使用--name参数提供的名称相同。

在您的示例中,jpackage需要:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(cygpath -w "${base[build:app]}")\${appDisplayName}.exe
$(cygpath -w "${base[build:app]}")\${appDisplayName}.ico

存在,以便能够创建快捷方式。

票数 1
EN

Stack Overflow用户

发布于 2021-10-17 10:44:47

如果在没有--win-shortcut的情况下出现错误94

这实际上可能是一个与提供给jpackage的--app-image参数有关的问题!一个指示器是警告,该应用图像不是由jPacka.创建的

如果您在创建应用程序镜像时的目标参数类似于--dest target/app-image,则在创建安装程序时必须使用--app-image target/app-image/myapp。使用--app-image target/app-image会导致此错误。一个很小的疏忽可能会因为隐秘的信息而造成很多令人费解的事情。

这似乎是因为@Mumrah81给出的原因:

...jpackage希望在app-image目录的根目录中找到可执行文件和图标来创建快捷方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60401120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文