首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分级Launch4J EXE不受Windows 10的信任

分级Launch4J EXE不受Windows 10的信任
EN

Stack Overflow用户
提问于 2019-11-27 15:11:54
回答 4查看 1.4K关注 0票数 5

请注意:我已经创建了,它可以用来完美地再现我所看到的问题。

这里的Java8试图通过Windows插件使用Launch4J来构建分级发射4j本机EXE应用程序。我正在我的Mac上开发一个Java应用程序,但是这个应用程序必须作为Windows运行在Windows10上,我还在使用ShadowJar来构建我自己的“胖罐子”。

我可以构建我的(Swing)应用程序的胖罐子,然后通过java -jar build/lib/myapp.jar在我的Mac上运行它。它的启动和运行没有问题。

下面是Launch4J的Gradle配置:

代码语言:javascript
运行
复制
launch4j {
    mainClassName = 'com.example.windows.hello.HelloWindowsApp'
    icon = "${projectDir}/icon.ico"
    jdkPreference = 'jdkOnly'
    initialHeapSize = 128
    jreMinVersion = '1.8.0'
    jreMaxVersion = '1.8.9'
    maxHeapSize = 512
    stayAlive = false
    bundledJre64Bit = true
    bundledJrePath = '../hello-windows/jre8'
}

当我运行./gradle clean build shadowJar createExe createDistro时,它会生成:

代码语言:javascript
运行
复制
hello-windows.zip/
    hello-windows.exe       -->     The Windows EXE built by the 'createExe' task
    lib/*                   -->     The lib/ dir for the EXE that is also built by the `createExe` task 
    jre8/                   -->     OpenJDK JRE8 (copied from the libs/jre8 dir)

因此,我复制该ZIP文件并将其移植到Windows 10 (64位)计算机上。我提取ZIP并通过在Windows中双击EXE来运行EXE (我可以确认,它将EXE视为应用程序类型)。我首先看到的是:

为什么会发生这种情况?,是否有任何Launch4J配置/设置可以更改,这样就不会发生这种情况?

提前感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-12-06 07:20:20

你的第一个问题更像是一个Windows问题。当您从zip文件解压缩应用程序时,Windows自然会将其标记为不安全,实际上,如果您选中“应用程序属性”选项卡,您将看到一个复选框,其中可以删除该不安全属性。这与在Linux中为可执行脚本运行chmod+x是一样的。

对于第二部分,我假设您正在为Launch4j使用gradle插件,假设您的项目文件夹通常是用包含可执行文件夹的同一个文件夹中的jre库构造的,那么配置Launch4j有两种主要方法。

  1. 通过指定路径,只需如下 ../jre
  2. 通过指定完整的相对路径 ../jre/bin/javaw.exe

最后生成的xml在第一种情况下应该是这样的。

代码语言:javascript
运行
复制
<jre>
    <path>../jre</path>
</jre>

主要的一点是,JRE的路径相对于可执行文件的位置,而不是当前目录。在本例中,我们将一个目录从可执行文件夹退到包含jre的文件夹。

票数 1
EN

Stack Overflow用户

发布于 2019-12-09 09:28:01

您需要按照描述的launch4j对这里创建的可执行文件进行签名,以防止SmartScreen阻止其运行。还请参阅支援论坛中的相关讨论。

票数 3
EN

Stack Overflow用户

发布于 2019-12-04 10:12:19

尝试将bundledJrePath设置为build.gradle中的jre8

代码语言:javascript
运行
复制
launch4j {
  ...
  bundledJrePath = 'jre8'
}

因为在您的情况下,这是提取zip时jre所在的相对路径。

http://launch4j.sourceforge.net/docs.html

<path><minVersion><maxVersion> <path>属性用于指定绑定的JRE的绝对路径或相对路径(可执行文件),它不依赖于当前目录或<chdir>。请注意,直到实际的应用程序执行时,才会检查此路径。

请注意,路径不能包含/bin/javaw.exe

使用以下调试标志运行exe时

代码语言:javascript
运行
复制
hello-windows.exe --l4j-debug

然后,它将在同一个目录中创建一个文件launch4j.log。在那里,您可以检查正确的jre是否被选中,例如:

代码语言:javascript
运行
复制
...
Bundled JRE:    jre8
Check launcher: C:\Users\IEUser\Downloads\hello-windows\jre8\bin\javaw.exe (OK)
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59073220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档