是否可以通过Windows服务进行数字签名? 从控制台应用程序起作用的相同代码不适用于Windows服务
当我尝试进行数字签名时,我得到了以下错误:
System.InvalidOperationException:当前会话不是 互动。在 System.Security.Cryptography.CAPI.CryptUIDlgSelectCertificateW(CRYPTUI_SELECTCERTIFICATE_STRUCTW csc)at System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromStore(SafeCertStoreHandle safeSourceStoreHandle,String title,String message,X509SelectionFlag selectionFlags,IntPtr hwndParent)at System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromCollectionHelper(X509Certificate2Collection 证书,字符串标题,字符串消息,X509SelectionFlag selectionFlag,IntPtr hwndParent)at System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromCollection(X509Certificate2Collection 证书,字符串标题,字符串消息,X509SelectionFlag selectionFlag)
似乎Windows Service无法调用提供要选择的证书列表或PIN窗口的GUI? 服务作为LocalSystem运行,即Admin。我还在app.manifest中添加了以下设置:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
是否可以使用win服务来实现此功能?
答案 0 :(得分:1)
您可能希望启用交互式服务检测(服务名称为UI0Detect)。
此服务将使您能够在特殊会话0中打开对话框窗口。它可以在Vista中运行。将弹出一个窗口,通知您(当前登录用户)服务需要桌面交互(即输入PIN以访问私钥)。
您可以阅读有关会话0和交互式服务检测here
的更多信息答案 1 :(得分:0)
您正在使用的方法会弹出一个对话框,允许您查看和选择要使用的证书。服务通常不具有用户界面(因为它们在交互式用户会话之外运行)。我相信你可以提供互动服务,但在这种情况下我不会推荐它。使用另一种选择证书的方式,可能基于所需证书的指纹,例如How to get X509Certificate from certificate store and generate xml signature data?