Преобразование CodeFluent.Runtime.Utilities.Authenticode.FindSuitableCertificate в C#

Я пытаюсь конвертировать Dim certificate As X509Certificate2 = CodeFluent.Runtime.Utilities.Authenticode.FindSuitableCertificate() из VB.Net в C#, и я знаю, что это X509Certificate2 AuthenticodeCert = CodeFluent.Runtime.Utilities.Authenticode.FindSuitableCertificate();

Проблема в том, что в C# он создает исключение ArgumentNullException, но работает в VB.Net.

    X509Certificate2 AuthenticodeCert = Authenticode.FindSuitableCertificate(); // Problem
            // Check if there is a  Certificate in the Certificate Store that can signs code.
            if (Authenticode.CanSignCode(AuthenticodeCert) == true) // Problem ArgumentNullException
            {// Bla, Bla}

Любая помощь будет оценена. Благодарю.

2 ответа

Библиотека CodeFluent.Runtime является библиотекой платформы.Net, независимой от языка вызова. Он сам реализован на C# .

Поэтому я подозреваю, что ваша проблема не связана с языком, который вы используете, но хранит сертификаты локального компьютера или другого пользователя-исполнителя.

По умолчанию FindSuitableCertificate просматривает хранилище сертификатов My для текущего пользователя. Существует еще одна более сложная подпись, которую можно использовать, если вместо нее установлен сертификат подписи, установленный на машине:

    /// <summary>
    /// Finds a suitable certificate for authenticode signing.
    /// </summary>
    /// <param name="storeName">The store name.</param>
    /// <param name="storeLocation">The store location.</param>
    /// <param name="thumbPrint">The optional thumbprint. May be null.</param>
    /// <returns>A certificate instance or null if not found.</returns>
    public static X509Certificate2 FindSuitableCertificate(StoreName storeName, StoreLocation storeLocation, string thumbPrint)

Я понял.

X509Certificate2 AuthenticodeCert = new X509Certificate2("PFX_Private_Key", "Password");

Единственная проблема - если он возвращает ноль, то я получаю сообщение об ошибке. Похоже, что единственным выходом для этого было попробовать Catch. Кто-нибудь знает лучший способ кодирования для нулевого значения?

Благодарю.

Другие вопросы по тегам