好吧,我找到了。這是非常痛苦的,因爲(如果我在正確的上下文中使用這個術語)「競爭條件」在這裏,如果代碼簽名沒有完成,然後再次開始運行該過程,它會失敗,因爲它不能因爲它正在被另一個進程使用,所以對.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>
。
我真的,真的希望這樣可以節省別人的悲傷某一天的很多...
謝謝!這爲我節省了很多時間。我只需要一種方法將文件屬性更改爲只讀,並且您的代碼運行良好! – 2015-07-31 16:11:12
至於簽名,我決定讓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
我很高興這有助於某人。我看着我的電子郵件,就像「堆棧交換?什麼?」 – Will 2015-07-31 19:23:43