.net 从windows服务使用Microsoft CryptoAPI的数字签名?

.net 从windows服务使用Microsoft CryptoAPI的数字签名?,.net,windows-services,digital-signature,smartcard,cryptoapi,.net,Windows Services,Digital Signature,Smartcard,Cryptoapi,可以从windows服务进行数字签名吗? 从控制台应用程序运行的代码与从Windows服务运行的代码不同 我尝试数字签名时出现以下错误: System.InvalidOperationException:当前会话不可用 互动的在 System.Security.Cryptography.CAPI.CryptUIDlgSelectCertificateW(CRYPTUI\u SELECTCERTIFICATE\u STRUCTW csc)在 System.Security.Cryptography

可以从windows服务进行数字签名吗? 从控制台应用程序运行的代码与从Windows服务运行的代码不同

我尝试数字签名时出现以下错误:

System.InvalidOperationException:当前会话不可用 互动的在 System.Security.Cryptography.CAPI.CryptUIDlgSelectCertificateW(CRYPTUI\u SELECTCERTIFICATE\u STRUCTW csc)在 System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromStore(SafeCertStoreHandle safeSourceStoreHandle、字符串标题、字符串消息、X509SelectionFlag selectionFlags,IntPtr hwndParent)位于 System.Security.Cryptography.X509Certificates.X509Certificate2UI。选择FromCollectionHelper(X509Certificate2Collection 证书、字符串标题、字符串消息、X509SelectionFlag selectionFlag,IntPtr hwndParent)位于 System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromCollection(X509Certificate2Collection 证书、字符串标题、字符串消息、X509SelectionFlag 选择标志)

似乎Windows服务无法调用GUI,该GUI提供可供选择的证书列表或PIN窗口? 服务以LocalSystem运行,LocalSystem是Admin。我还添加了具有以下设置的app.manifest:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />


是否可以将win service用于此功能?

您正在使用的方法会弹出一个对话框,允许您查看和选择要使用的证书。服务通常不能有用户界面(因为它们在交互用户会话之外运行)。我相信你可以有互动服务,但我不推荐在这种情况下。使用另一种方式选择证书,可能基于所需证书的指纹,例如,

您可能希望启用交互式服务检测(服务名称为UI0Detect)

此服务将使您能够在特殊会话0中打开对话框窗口。它从Vista开始工作。将弹出一个窗口,通知您(当前登录的用户)服务需要桌面交互(即输入PIN以访问私钥)


您可以阅读有关会话0和交互式服务检测的更多信息

问题在于用户需要选择证书并使用智能卡上的私钥对其进行签名。我不知道前面将使用哪种证书。另外,当使用私钥签名时,还有一个windows pop对话框,它提供了一个回车键。将应用程序作为服务运行的动机是什么?它是win服务中的一个HttpListener,它侦听本地主机特定端口,并从公共网站的个人电子ID启用数字签名。然后,调用弹出的方法听起来似乎没有意义在本地打开一个对话框。远程用户无论如何都无法看到它。他当然会看到,因为他将首先安装win服务,然后才能使用该站点。它是特定的网站,需要先决条件。这是概念证明,嗯,我试试看。我开始将win服务移植到无形的systray应用程序。但好奇模式是开着的:)好吧,首先我在我的Win10中解决了这个问题,然后,消息显示了,但它阻止了我的键盘和鼠标,背景是空白的。它也找不到证书,GUI显示找不到证书。我想我会放弃WIn服务开发,转而使用无格式应用程序。我没有遇到任何问题。但当时是windows 2008,我们也放弃了会话0的概念,转而支持服务启动参数选项。