2012-03-29 56 views
3

我有以下要求,簽署一個證書的二進制文件,但沒有signtool.exe;這個想法是通過代碼來完成的。可以通過.NET代碼簽署一個二進制文件嗎? (沒有signtool.exe)

你知道這有可能嗎?

+0

重複? http://stackoverflow.com/questions/692565/how-do-you-programmatically-resign-a-net-assembly-with-a-strong-name – Nikolay 2012-03-29 09:51:22

+0

確實。感謝您發現這一點。那就是說,我該怎麼做?刪除這個問題,還是保持開放狀態,因爲它沒有以同樣的方式提問? – Vinzz 2012-03-29 11:58:23

+0

不重複。 'signtool.exe'(在這裏引用)生成Authenticode簽名(對於任何PE文件); 「強命名」(在另一個問題中提到)使用'sn.exe',僅用於託管程序集。 – 2012-03-29 12:45:38

回答

4

您將需要使用從mssign32.dll導出的SignerSignSignerSignEx函數。

要使用這些,你需要定義SIGNER_SUBJECT_INFOSIGNER_FILE_INFOSIGNER_CERTSIGNER_SIGNATURE_INFO等結構的管理版本,然後正確指定的P/Invoke簽名的本地方法。

this blog post的中途,有一個C++的例子叫做SignerSignEx; Mark已將其移植到此StackOverflow answer中的C#中。

+0

謝謝,我會試一試 – Vinzz 2012-03-29 13:25:47

+0

沒有得到它在C#中工作(沒有花費足夠的時間,是在一個非常短的期限內),但它在完美的舊C++ 。謝謝! – Vinzz 2012-06-10 12:49:39

+0

如果您使用的是Windows 8,請使用signerSignEx2 – 2014-07-13 11:05:08

相關問題