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

Wil*_*ill 5 java windows ant javafx code-signing

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

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

那么,有没有人知道如何对捆绑自包含JavaFX应用程序时启动jar的.exe进行代码签名?

Wil*_*ill 10

好的,我找到了.这是非常痛苦的,因为(如果我在正确的上下文中使用这个术语)"竞争条件"在这里,如果代码签名在你再次开始运行之前没有完成,它会失败,因为它不能使用.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>
Run Code Online (Sandbox Code Playgroud)

所以现在,最后,在最后一刻,我们有一个完整而可行的答案,显然是非常深奥的问题,除了我自己已经处理过(或者是一个非常严密保密的秘密,我不确定哪个):你好吗?在存储之前对JavaFX包创建的可执行文件进行代码签名?

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

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

我真的,真的希望有一天这会给某人带来很多悲伤......


Sae*_*ian 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")
Run Code Online (Sandbox Code Playgroud)

要确保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>
Run Code Online (Sandbox Code Playgroud)