2017-07-05 77 views
1

我正在使用visual studio 2017.我不是開發人員。我只是想寫一個簡單的解析腳本,我熟悉Visual Studio。我使用Atmel Studio(基於VS)編寫嵌入式代碼,但我不必處理簽名。我在工作計算機上安裝了visual studio,現在每次進行新構建時都會出現bit9錯誤。內部IT已經將我指向了一堆稍微過時的證書。我現在有一個證書可以用於我的版本,但是定義here的進程顯然不適用於Win32應用程序。我在項目屬性中沒有簽名選項卡。如何讓Visual Studio 2017自動簽署Win32應用程序?

我也看過使用signtool的visual studio命令行。但是,我需要花很多時間來了解它是如何工作和實施的。

希望別人已經解決了這個問題,我可以節省時間。如果沒有簡單的解決方案,我會回去手動解析,因爲這已經佔用了我大部分時間。

+0

IT有沒有給你一個pfx?(和密碼,當然),只是好奇,我不得不這樣做VS2010和VS2015。除非MS最終將它集成到IDE中,以便在VS 2017中用於非託管C++的項目配置(並且它聽起來像它仍然不是),否則確實可以使用signtool,並且它不是那麼難,只要您具有pfx和關聯的密碼。 – WhozCraig

+0

@WhozCraig他們給我一個鏈接到一個微軟網站來生成我自己的pfx。所以是的。我有一個使用我設置的密碼的pfx。 –

回答

0

這就是我用Visual Studio 2010和Visual Studio 2015爲非託管C或C++ Win32應用程序完成的。您需要:

  • 簽名證書。在Windows中工作時,通常以PFX的形式提供,並且通常是證書鏈中的中間證書。
  • 上述PFX解密證書私鑰的密碼。

有了這些,你的Win32項目下面的自定義生成步驟可以創建:

"$(FrameworkSDKDir)bin\\x86\signtool.exe" sign /v /f "path-to-your-cert\yourcert.pfx" /p password "$(TargetPath)" > "$(OutDir)sign\$(ProjectName)-sign.out" 

這將使用您的證書籤署項目輸出(可能是一個DLL或EXE沒有區別) ,並將簽名證書的輸出記錄在文件後面的後綴名爲sign.out的文件中,然後將該文件放在名爲sign的文件夾中,以關閉輸出目錄。

這似乎有點矯枉過正,但是生成輸出文件有一個原因。通過創建文件,並將其命名爲自定義生成步驟的「產出」的一個:

enter image description here

可以比較用來確定是否續約與否。每次構建項目時,如果重新生成目標映像(您的exe或dll),則輸出文件將過期,並且自定義構建步驟將被啓動以重新生成它(並因此也會重新簽名映像)。該sign.out文件,順便說一句,將包含這樣的事情:

The following certificate was selected: 
    Issued to: The Signing Cert Name Here 

    Issued by: The Issuer Cert Name Here 

    Expires: Sat Dec 31 16:59:59 2039 

    SHA1 hash: 232C80E19EBC71330E7C12CA8C07B345B1531777 


Done Adding Additional Store 
Successfully signed: full-path-to-image-here 

Number of files successfully Signed: 1 

Number of warnings: 0 

Number of errors: 0 

一旦你有你的PFX和密碼,就可以輕鬆不僅僅是手測試命令之前,你終於將其配置爲構建的一部分。我看過的唯一真正的通配符是signtool.exe的完整路徑,它看起來會不時發生變化(與VS2008不同的是VS2015,比如VS2015)。

無論如何,這就是我做到的。也可以。

+0

這正是我希望我能用命令行做的事! 原諒我的無知,但我想確保我得到這個權利。 我將用我的證書的完整路徑替換「path-to-cert-yourcert.pfx」。 我將用我的密碼替換「$(TargetPath)」作爲純文本? –

+0

@NateSan你也可以從命令行完全做到這一點(顯然)。您必須在路徑中有「signtool.exe」,如果您從Visual Studio命令提示符運行,它將自動運行。我想(可能是錯誤地)你正在尋求將它直接整合到你的解決方案和項目文件中。如果是這樣,以上是適用的。如果沒有,並且您只需要一個命令行,則只需要上述的一小部分(實際的命令)。 – WhozCraig

+0

忽略上一個問題。編輯系統正在搞亂我。 所以「$(FrameworkSDKDir)bin \\ x86 \ signtool.exe」對我的版本可能準確或不準確。 sign/v/f「path-to-your-cert \ yourcert.pfx」只是被完整目錄替換爲pxf? /p密碼變成/ p whateverthepassis沒有引號。 「$(TargetPath)」是包含exe文件夾的路徑? 「$(OutDir)可能與上述目錄相同,對嗎? sign \ $(ProjectName)-sign.out」項目名稱變成什麼項目被稱爲空格和所有? –

相關問題