0

我正在开发一个涉及智能卡(数字签名)的应用程序。让我们假设我们在这两种环境相同的代码:Windows服务和控制台应用程序之间的权限差异

  • 控制台应用程序,由管理员用户执行
  • Windows服务,由管理员用户

我suposed执行,如果这两个代码分别为由同一用户执行,他们将拥有相同的权限。看起来这不是真的。当我尝试使用Windows服务(已执行与管理员用户)我收到

TargetInvocationException 
CryptographicException 

Can't initialize DLL provider at System.Security.Cryptography.Utils.CreateProvHandle(. 

至于我的互联网上阅读,也许是权限问题的一些国王。控制台应用程序正常。

  • 如果Windows服务和控制台应用程序由同一用户执行,它们之间的区别是什么?

  • 是否可以通过Windows Service实现相同的结果?

免费虚拟啤酒对谁解决它的人;)

谢谢!

回答

1

您是否曾尝试以本地服务,网络服务和本地系统的身份运行服务?改变这些没有区别?我知道我必须将我的本地服务更改为本地系统才能访问我的文件。不知道你是否使用任何文件,但至少它是要检查的东西。

+0

好的,谢谢布兰迪,工作! :)。问题是我不知道为什么。我更改为其他用户,因为网络服务无法访问证书。在某些方面,我不明白,证书已在文件夹中结束: - c:\ windows \ system32 \ config \ systemprofile \ application data \ microsoft \ systemcertificates \ my \ certificates 像这个文件位于那个文件夹可以与本地服务工作,我没有得到错误:? - 在System.Security.Cryptography.Utils.CreateProvHandle(无法初始化DLL提供商 有人知道这个文件夹中如何结束 感谢布兰迪! – user256038 2010-06-14 10:10:53

0

不幸的是,我没有解决方案,但Windows服务的行为与普通程序的行为完全不同。例如,除非您的服务在初始化这些驱动器的服务之后启动,否则您将无法从Windows服务访问网络驱动器。

您可以添加依赖到您的服务,使他们依赖于您需要的服务,或在最后。这可以解决你的问题,但我不能保证。

+0

谢谢Callash,非常感谢。不幸的是,我的服务正在手动启动,因此之前解决了所有可能的依赖项。 – user256038 2010-06-02 10:08:10

+0

如果你总是手动开始你的服务,如果你不介意我的问题,首先要把它作为一个windows服务,这有什么意义呢? – 2010-06-02 10:26:45

+0

是的,很好的问题;)。我正在手动启动该服务仅用于测试目的。在生产服务器中,它必须自动启动:)。 – user256038 2010-06-02 10:31:30

0

控制台应用程序和导致我头痛的Windows服务之间的一个区别在于,Windows服务使用C:\ Windows \ System32作为当前目录。我不知道这是否会对您的情况有所帮助,但我想您可以尝试一下:http://igorbrejc.net/development/c/windows-services-and-working-directories

+0

您能发布整个异常描述(包括堆栈跟踪)吗? – 2010-06-03 07:38:51

+0

我把它发布在一个新的答案,谢谢:) – user256038 2010-06-03 07:50:57

相关问题