在经历了很多痛苦之后,我即将完成我的项目,现在我需要知道如何对可执行文件进行代码签名。不,不是 .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/