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,它将为空。
我运行用题中的方法遇到了问题。如果我尝试签署 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,它将为空。