回答沒有爲我工作,我最終使用的源代碼從該頁面:
https://msdn.microsoft.com/en-us/library/windows/hardware/mt674914%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
我不得不做一些額外的調整:
使用前這樣,請確保EV證書在您的個人證書存儲區中。在您使用USB令牌的工具中,您應該可以打開證書並選擇「安裝證書」。
在visual studio中創建一個新的控制檯應用程序並粘貼此源代碼。 安裝塊體包「WindowsBase」以獲取System.IO.Packaging命名空間。
隨着一些額外的源代碼,我們可以有這樣的工作:
class Program
{
static void Main(string[] args)
{
X509Store store = new X509Store("My");
store.Open(OpenFlags.ReadOnly);
X509Certificate2 evCert = null;
foreach (X509Certificate2 mCert in store.Certificates)
{
if (mCert.Thumbprint == "3DF652D7EyourThumbprintF")
{
evCert = mCert;
}
}
Sign(@"C:\Path\To\Your\HLKXFile.hlkx", evCert);
}
public static void Sign(string package, X509Certificate2 certificate)
{
// Open the package to sign it
Package packageToSign = Package.Open(package);
// Specify that the digital signature should exist
// embedded in the signature part
PackageDigitalSignatureManager signatureManager = new PackageDigitalSignatureManager(packageToSign);
signatureManager.CertificateOption = CertificateEmbeddingOption.InCertificatePart;
// We want to sign every part in the package
List<Uri> partsToSign = new List<Uri>();
foreach (PackagePart part in packageToSign.GetParts())
{
partsToSign.Add(part.Uri);
}
// We will sign every relationship by type
// This will mean the signature is invalidated if *anything* is modified in //the package post-signing
List<PackageRelationshipSelector> relationshipSelectors = new List<PackageRelationshipSelector>();
foreach (PackageRelationship relationship in packageToSign.GetRelationships())
{
relationshipSelectors.Add(new PackageRelationshipSelector(relationship.SourceUri, PackageRelationshipSelectorType.Type, relationship.RelationshipType));
}
try
{
signatureManager.Sign(partsToSign, certificate, relationshipSelectors);
}
finally
{
packageToSign.Close();
}
}
}
更換指紋與EV證書SHA1。
Package選項卡上現在有「Create package」。只有「合併包」和「添加驅動程序文件夾」 –