我已经使用 Launch4J 为 Java 应用程序构建了一个可执行文件。我在可执行文件中嵌入了 JRE 和 Uber Jar。可执行文件有效。
但是,在我使用 signtool 对可执行文件执行代码签名后,它停止工作。这是我用来签署可执行文件的命令:
signtool sign /td sha1 /fd sha1 /f my_certificate.pfx /p mypass myexecutable.exe
这是对话框中显示的错误:
Java Virtual Machine Launcher
Error: Invalid or corrupt jarfile
为什么我的可执行文件在代码签名后停止工作?
这是签名由 launch4j 生成的文件时的一个已知问题。解决方法是在 launch4j 配置中指定主类,而不是依赖清单中带有 Main-Class 属性的可执行 jar:
<classPath>
<mainClass>org.acme.Main</mainClass>
</classPath>
有关更多信息,请参阅https://github.com/ebourg/jsign/issues/80。