Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# windows服务和控制台应用程序之间的权限差异_C#_Windows_Windows Services_Permissions_Windows Server 2003 - Fatal编程技术网

C# windows服务和控制台应用程序之间的权限差异

C# windows服务和控制台应用程序之间的权限差异,c#,windows,windows-services,permissions,windows-server-2003,C#,Windows,Windows Services,Permissions,Windows Server 2003,我正在开发一个包含智能卡(数字签名)的应用程序。让我们假设在这两个上下文中有相同的代码: 控制台应用程序,由管理员用户执行 Windows服务,由管理员用户执行 我发现,如果这两个代码是由同一个用户执行的,它们将具有相同的权限。这似乎不是真的。当我尝试使用Windows服务(使用管理员用户执行)时,我收到 TargetInvocationException CryptographicException Can't initialize DLL provider at System.Secu

我正在开发一个包含智能卡(数字签名)的应用程序。让我们假设在这两个上下文中有相同的代码:

  • 控制台应用程序,由管理员用户执行
  • Windows服务,由管理员用户执行
我发现,如果这两个代码是由同一个用户执行的,它们将具有相同的权限。这似乎不是真的。当我尝试使用Windows服务(使用管理员用户执行)时,我收到

TargetInvocationException
CryptographicException

Can't initialize DLL provider at System.Security.Cryptography.Utils.CreateProvHandle(.
据我在网上看到的,可能是权限问题。控制台应用程序工作正常

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

  • 使用Windows服务是否可以实现相同的结果

为解决问题的人免费提供虚拟啤酒;)


谢谢

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


您可以向服务中添加依赖项,使它们依赖于您需要的服务,或者在最后。这可能会解决您的问题,但我不能保证。

控制台应用程序和Windows服务之间的一个让我头疼的区别是,Windows服务使用C:\Windows\System32作为当前目录。我不知道这对您的情况是否有帮助,但我想您可以试试:

您是否尝试过将您的服务作为本地服务、网络服务和本地系统运行?改变这些没有区别吗?我知道我必须将我的系统从本地服务改为本地系统,以便让它访问我的文件。不确定您是否正在使用任何文件,但至少需要检查一下。

谢谢Callash,非常感谢。不幸的是,我的服务是手动启动的,所以之前所有可能的依赖项都已解决。如果您总是手动启动服务,如果您不介意我提问的话,首先将其作为windows服务有什么意义?是的,问得好;)。我只是出于测试目的手动启动服务。在生产服务器中,它必须自动启动:)。然后我能想到的唯一其他解决方案是创建一个单独的AppDomain并自己处理安全问题。但我不是这方面的专家,我想你会想用谷歌搜索一下。谢谢你,卡拉什,但没办法。我已经成功安装了.Net Framework 2.0配置工具,并授予所有代码组“完全信任”。但这不起作用。。。我不知道该看什么…你能发布整个异常描述(包括堆栈跟踪)吗?好的,谢谢Brandi,成功了!!:)。问题是我不知道为什么。我改为其他用户,因为网络服务无法访问证书。在某种程度上我不明白,证书已在以下文件夹中结束:-c:\windows\system32\config\systemprofile\application data\microsoft\systemcertificates\my\certificates类似于此文件位于该文件夹中它可以与本地服务一起工作,并且我没有收到错误:-无法在System.Security.Cryptography.Utils.CreateProvHandle处初始化DLL提供程序(.有人知道这个文件在那个文件夹里是怎么结束的吗?谢谢布兰迪!