XpsDocument.SignDigitally 在 IsSignable 上抛出 NullReferenceException

XpsDocument.SignDigitally throws NullReferenceException on IsSignable

我运行用题中的方法遇到了问题。如果我尝试签署 XPS 文档,它会遇到 NullReferenceException:

在System.Windows.Xps.Packaging.XpsDocument.get_IsSignable() 在 System.Windows.Xps.Packaging.XpsDocument.SignDigitally(X509Certificate 证书、布尔值 embedCertificate、XpsDigSigPartAlteringRestrictions 限制、字符串 signatureId、布尔值 testIsSignable) 在 System.Windows.Xps.Packaging.XpsDocument.SignDigitally(X509Certificate 证书、布尔值 embedCertificate、XpsDigSigPartAlteringRestrictions 限制)

如有任何建议,我们将不胜感激。

    if (sign_digitally)
    {
        UserCertificateSelector selector = new UserCertificateSelector();
        if (selector.ShowDialog() == true)
            {
                var certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
certStore.Open(OpenFlags.ReadOnly);
#if DEBUG
                X509CertificateCollection collection = certStore.Certificates;
#else
                X509CertificateCollection collection = certStore.Certificates.Find(X509FindType.FindByThumbprint, selector.SelectedCertificate.CertificateThumbPrint,true);
#endif
                if (collection.Count > 0)
                {
                    xpsDoc.SignDigitally(collection[0], true, XpsDigSigPartAlteringRestrictions.None);
                 }
             }
         }
...

确保您处理的是 XPS 文件格式,而不是 OXPS。两者都可以作为 XpsDocument 打开,但只能对 XPS 进行签名。打开文件后,您可以检查“XpsDocument.IsSignable”标志 - 对于 OXPS,它将为空。