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

时间:2014-12-04 05:01:28

标签: java windows ant javafx code-signing

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

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

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

3 个答案:

答案 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包创建的可执行文件进行代码签名?

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

.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文件夹,如其他答案中所示。

http://www.jrsoftware.org/files/is5-whatsnew.htm

相关问题