java - 如何对捆绑 JavaFX 应用程序时创建的可执行启动器进行代码签名?

标签 java windows ant javafx code-signing

在经历了很多痛苦之后,我即将完成我的项目,现在我需要知道如何对可执行文件进行代码签名。不,不是 .jar,我知道该怎么做。我需要的是能够对为我们的用户启动 .jar 的 .exe 文件进行代码签名,这样他们就不会看到“您是否要允许来自未知发布者的以下程序”警告消息。

我知道如何使用 INNO 脚本自定义进程,我可以使用它对安装程序进行代码签名,我知道如何包含将用于可执行文件和快捷方式的不同图标文件,我知道如何通过 ANT 脚本对 jar 进行代码签名,但这完全让我望而却步。

那么,有谁知道在捆绑独立的 JavaFX 应用程序时如何对启动 jar 的 .exe 进行代码签名?

最佳答案

好的,我找到了。这是非常痛苦的,因为这里存在(如果我在正确的上下文中使用这个术语)“竞争条件”,如果代码签名在您再次开始运行该过程之前没有完成,它将失败,因为它不能对 .exe 执行任何操作,因为它正被另一个进程使用。

事实证明,只要您的 IDE 在 Admin 中运行(无论如何对于 Windows),也不需要提升您的脚本。

无论如何,我的问题是文件被设置为只读。非常烦人,但幸运的是,VBScript 允许您更改文件属性,因此只需在尝试对其进行代码签名之前执行此操作即可:

<?xml version = "1.0" ?>
<package>
    <job id="CodeSign">
    <script language = "VBScript">
        <![CDATA[    
            'Set File as Normal. . .

            Dim objFSO, objFile
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            Set objFile = objFSO.GetFile("<Relative Path>\<File.exe>")
            objFile.Attributes = 0

            Dim Shell
            Set Shell = WScript.CreateObject("WScript.Shell")
            Shell.Run "<Code Sign> ""<Relative Path>\<File.exe>""", 1, True
            Set Shell = Nothing
            Set objFSO = Nothing
            Set objFile = Nothing
        ]]>
    </script>
    </job>
</package>

所以现在,终于,在 LONG LAST,我们对这个问题有了一个完整和可行的答案,显然是非常深奥的问题,除了我自己没有人处理过(或者是一个非常严密保守的 secret ,我不确定是哪个):在存储之前如何对 JavaFX 包创建的可执行文件进行代码签名?

  • 使用 JavaScript 或 VBScript(您的 偏好)
  • 将存储文件的目录添加到类路径(对于 NetBeans,您转到工具 -> 选项 -> Java 选项卡,选择类路径旁边的添加目录,浏览到目录并添加它)。
  • 在您的 WSF 文件的脚本部分中,获取文件对象并将其属性设置为正常 (0)。
  • 然后 Shell.Run 您首选的代码签名应用程序方法。 1 用于显示“代码签名”窗口,True 用于让 VBScript 等待直到它完成,以避免竞争条件。

.exe 将始终存储在 WSF 脚本文件的上一级目录中,因此相对路径始终为 <FILENAME>\<FILENAME.exe> .

我真的,真的希望有一天这能为某人省去很多悲伤......

关于java - 如何对捆绑 JavaFX 应用程序时创建的可执行启动器进行代码签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27286618/

相关文章:

ant - 如果 makefile 失败则停止 ant 构建

Java ImageIO : How can I read a BufferedImage from file,以便它使用DataBufferFloat?

c# - WMI 提供程序程序集中的 RunInstaller 属性

ant - 如何从 vanilla ant(不是 ws_ant)访问 Websphere 6.1 ant 任务

ant - javadoc 非法包名

c# - 将数字 11 格式化为 00000011

java - 如何防止 java.lang.NumberFormatException : For input string: "N/A"?

java - 从递归中画出一棵基本树?

java.lang.SecurityException : JAR manifest requested to run in all-permissons only

python - 使用 python 的 win32print 模块打印 PDF 文档?