所以在经历了很多痛苦之后,我即将完成我的项目,现在我需要知道如何对可执行文件进行代码签名。不,不是.jar,我知道该怎么做。我需要的是能够对为用户启动.jar的.exe文件进行代码签名,以便他们看不到"是否要允许来自未知发布者的以下程序"警告消息。
我知道如何使用 INNO 脚本自定义该过程,我可以使用它对安装程序进行代码签名,我知道如何包含将用于可执行文件和快捷方式的不同图标文件,并且我知道如何通过 ANT 脚本对 jar 进行代码签名,但这完全让我无法理解。
那么,有谁知道在捆绑自包含的 JavaFX 应用程序时,如何对启动 jar 的.exe进行代码签名?
好的,所以我找到了。这是非常痛苦的,因为这里有(如果我在正确的上下文中使用这个术语("竞争条件",因为如果在你再次开始运行进程之前代码签名没有完成,它会失败,因为它不能对.exe做任何事情,因为它被另一个进程使用。
事实证明,只要您的 IDE 在 Admin 中运行(无论如何对于 Windows(,也不需要提升您的脚本。
Anyay,我的问题是该文件被设置为只读。非常烦人,但幸运的是 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,我们对这个显然非常深奥的问题有一个完整而可行的答案,除了我自己之外没有人处理过(或者是一个非常严密保护的秘密,我不确定是哪个(:在存储之前,如何对JavaFX捆绑包创建的可执行文件进行代码签名?
- 使用 JavaScript 或 VBScript 创建一个 WSF 文件(您的偏好(
- 将存储文件的目录添加到类路径(对于 NetBeans,请转到"工具"-">选项"->"Java 选项卡",选择"类路径"旁边的"添加目录",浏览到该目录,然后添加它(。
- 在 WSF 文件的"脚本"部分,获取文件对象并将其属性设置为 normal (0(。
- 然后 Shell.运行您喜欢的代码签名应用程序方法。 1 用于显示"代码符号"窗口,True 表示让 VBScript 等到它完成,希望避免争用条件。
.exe将始终存储在WSF脚本文件的一个目录中,因此相对路径将始终<FILENAME><FILENAME.exe>
。
我真的,真的希望有一天这可以为某人节省很多悲伤......
添加以下内容作为package/windows/MyProject.iss文件的第一行:
#expr Exec("C:Program Files (x86)Windows Kits8.0binx64signtool.exe", "sign /n CompanyName /tr tsa.starfieldtech.com " + AddBackslash(SourcePath) + "MyProjectMyProject.exe")
要确保 exe 文件是可写的,请添加 package/windows/MyProject-post-image.wsf:
<?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("MyProjectMyProject.exe")
objFile.Attributes = 0
]]>
</script>
</job>
</package>
从Inno Setup 5.5.9(2016-04-06(开始,文件部分有标志"符号",可用于对应用程序exe进行签名。您仍然需要将.wsf文件添加到包/窗口文件夹,如其他答案所示。
http://www.jrsoftware.org/files/is5-whatsnew.htm