C#:简单的Windows服务提供了安全例外(C#: Simple Windows Service

2019-08-03 15:07发布

我做了演练在下面的链接: http://msdn.microsoft.com/en-us/library/zt39148a%28VS.80%29.aspx

我已经完全遵循它,一行行。 我成功地安装了服务,但是,当我尝试运行它,将出现以下错误信息:

“未处理的异常(” System.Security.SecurityException')发生在MyNewService.Exe [5292]。

我已经看到,对于很多人来说它的工作原理,但有些人得到这个例外,虽然我无法找到答案。 有没有人有一个想法? 谢谢。

Answer 1:

该EventLog.SourceExists方法就是将导致此异常。 最常见的原因是它尝试访问所有在Vista默认你没有权限对事件日志(包括安全日志)。 另一个原因可能是,如果你正在寻找的源未在事件日志中发现的(我觉得相当奇怪!)。

一个变通办法:

bool sourceFound = false;
try
{
    sourceFound = EventLog.SourceExists("MySource");
}
catch (SecurityException)
{
    sourceFound = false;
}

另一种选择是简单地提升权限,但是,如你在哪里以下教程一步一步的服务将LocalService帐户下运行(这再次将没有权限为这个特定的方法)。 因此,你会发现MSDN文档的解决方案是检查在的ServiceInstaller是否存在事件源,如果没有,请在安装程序的源。



Answer 2:

你是你的机器上的本地管理员? 如果是这样,把下面的代码行,在你的Windows服务的构造函数的顶部:

System.Diagnostics.Debugger.Break();

当服务开始运行,它会打这个断点,让你跳到Visual Studio。 然后,您可以从那里调试,直到你发现在异常发生。



Answer 3:

去拿的副本进程监视器 ,看会发生什么-你应该显示为一个失败的结果的问题,你可以从那里调查...

编辑:为了澄清,其从微软(Sysinternals的)一个免费的工具,它做什么它在锡说:)



Answer 4:

只是一个猜测:是您的.exe文件躺在一个网络文件夹? 或者是被标记为“从Internet下载”? 因为在这种情况下,.NET框架将分配给它的权限较少时相比,它是直接在本地驱动器上,并从互联网上下载不显着。



文章来源: C#: Simple Windows Service gives Security Exception