因此,经过多次努力,我即将完成项目,现在我需要知道如何编写可执行文件的代码。不,不是.jar,我知道怎么做。我需要的是能够对为我们的用户启动.jar的.exe文件进行代码签名,这样他们就不会看到"您是否要允许来自未知发布者的以下程序& #34;警告信息。
我知道如何使用INNO脚本自定义流程,我可以使用它来对安装程序进行代码签名,我知道如何包含将用于可执行文件和快捷方式的不同图标文件,我知道如何通过ANT脚本对jar进行代码签名,但是这完全不适合我。
那么,有没有人知道如何对捆绑自包含JavaFX应用程序时启动jar的.exe进行代码签名?
答案 0 :(得分:9)
好的,我找到了。这是非常痛苦的,因为(如果我在正确的背景下使用这个术语)"竞争条件"在这里,如果代码签名在您再次开始运行之前没有完成,则会失败,因为它无法对.exe执行任何操作,因为它正被另一个进程使用。
只要您的IDE在管理员中运行(无论如何还是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>
所以现在,终于,在最后一刻,我们有一个完整而可行的答案,显然是非常深奥的问题,除了我自己以外没有人处理过(或者是一个非常严密保密的秘密,我不知道哪个):在存储之前,如何对JavaFX包创建的可执行文件进行代码签名?
.exe将始终存储在WSF脚本文件的一个目录中,因此相对路径始终为<FILENAME>\<FILENAME.exe>
。
我真的,真的希望有一天能给别人带来很多悲伤......
答案 1 :(得分:5)
将以下内容添加为package / windows / MyProject.iss文件的第一行:
#expr Exec("C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool.exe", "sign /n CompanyName /tr tsa.starfieldtech.com " + AddBackslash(SourcePath) + "MyProject\MyProject.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("MyProject\MyProject.exe")
objFile.Attributes = 0
]]>
</script>
</job>
</package>
答案 2 :(得分:1)
似乎从Inno Setup 5.5.9(2016-04-06)开始有Flag&#39; sign&#39;对于可用于对应用程序exe进行签名的“文件”部分。您仍然需要将.wsf文件添加到package / windows文件夹,如其他答案中所示。