2014-12-04 43 views
3

所以經過很多痛苦之後,我即將完成我的項目,現在我需要知道如何對可執行文件進行編碼。不,不是.jar,我知道該怎麼做。我需要的是能夠對爲我們的用戶啓動.jar的.exe文件進行代碼簽名,以便他們不會看到「是否允許來自未知發佈者的以下程序」警告消息。如何對綁定JavaFX應用程序時創建的可執行啓動器進行代碼簽名?

我知道如何使用INNO腳本定製進程,我可以使用它來代碼簽名安裝程序,並且我知道如何包含將用於可執行文件和快捷方式的不同圖標文件,並且我知道如何通過ANT腳本對jar進行代碼簽名,但是這完全沒有辦法。

那麼,有沒有人知道我怎麼可以去代碼簽署.exe綁定自包含的JavaFX應用程序時啓動jar的。

回答

7

好吧,我找到了。這是非常痛苦的,因爲(如果我在正確的上下文中使用這個術語)「競爭條件」在這裏,如果代碼簽名沒有完成,然後再次開始運行該過程,它會失敗,因爲它不能因爲它正在被另一個進程使用,所以對.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> 

所以,現在,終於,終於,我們有一個完整的,可行的答案,顯然是非常深奧的問題,除了我自己沒有人處理過(或者是一個非常謹慎的祕密,我不知道是哪一個):你如何對JavaFX包創建的可執行文件進行代碼簽名存儲在哪裏?

  • 創建一個WSF文件能夠與JavaScript或VBScript(您 偏好)
  • 添加在該文件被存儲到類路徑的目錄(NetBeans的你去工具 - >選項 - > Java的選項卡,選擇類路徑旁邊的添加目錄,瀏覽到該目錄並添加它)。
  • 在您的WSF文件中的腳本部分,獲取文件對象並將其屬性設置爲普通(0)。
  • 然後Shell.Run您的代碼簽名應用程序的首選方法。 1用於顯示Code Sign窗口,True用於使VBScript等待,直到完成以希望避免競爭狀態。

該.exe將永遠存儲在WSF腳本文件的一個目錄中,因此相對路徑始終爲<FILENAME>\<FILENAME.exe>

我真的,真的希望這樣可以節省別人的悲傷某一天的很多...

+0

謝謝!這爲我節省了很多時間。我只需要一種方法將文件屬性更改爲只讀,並且您的代碼運行良好! – 2015-07-31 16:11:12

+1

至於簽名,我決定讓innosetup重新處理這件事。也許這將解決你所談論的競爭條件。只需將此行添加到inno安裝腳本的開頭即可:#expr Exec(「C:\ Program Files(x86)\ Windows Kits \ 8.0 \ bin \ x64 \ signtool.exe」,「sign/n Concord/tr http:/ /tsa.starfieldtech.com「+ AddBackslash(SourcePath)+」MyFolder \ MyFile.exe「) – 2015-07-31 16:11:19

+0

我很高興這有助於某人。我看着我的電子郵件,就像「堆棧交換?什麼?」 – Will 2015-07-31 19:23:43

4

添加如下包/窗/ 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文件是可寫的添加包/ Windows/MyProject後圖像。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> 
+0

我很難理解MyProject.iss文件中究竟發生了什麼。我目前沒有這樣的文件,只是讓javapackager把所有東西放在一起。我用你建議的單行創建.iss文件,並收到一個錯誤,說它需要一個帶有AppName,AppVerName和DefaultDirName的[Setup]部分。不知道該怎麼辦,但是當我把它們放入時,沒有簽名,最終的.exe文件沒有正確創建。我該怎麼做呢? – 2016-07-29 20:23:08

+1

是的.iss文件不應該是空的。當你使用javapackager時,它會爲你創建一個默認的.iss文件,並在輸出時會告訴你這個.iss文件保存在哪裏。轉到該文件夾​​並將.iss複製到其他地方。然後將上面的行添加到.iss文件的開頭。 – 2016-08-04 17:40:11

+0

謝謝。我只是把這個文件與iss。在代碼簽名之前及時執行腳本。非常精通。 – 2016-12-22 15:42:56

1

似乎作爲創新安裝5.5.9(2016年4月6日)的存在標示對可用於簽署應用程序的exe文件部分「符號」。您仍然需要將.wsf文件添加到軟件包/ windows文件夾,如其他答案中所示。

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

相關問題