13

我正在以下链接中进行演练:http: //msdn.microsoft.com/en-us/library/zt39148a%28VS.80%29.aspx

我已经完全按照它逐行进行了。我成功安装了该服务,但是,当我尝试运行它时,出现以下错误消息:

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

我已经看到对很多人来说它有效,但有些人得到了这个例外,尽管我找不到答案。有人有想法吗?谢谢。

4

4 回答 4

19

EventLog.SourceExists方法将导致此异常。最常见的原因是它尝试访问所有事件日志(包括安全日志),在 Vista 中默认情况下您将无权访问这些日志。另一个原因可能是在事件日志中找不到您要查找的源(我觉得这很奇怪!)。

解决方法:

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

但是,另一种选择是简单地提升您的权限,因为您按照教程一步一步地操作您的服务将在 LocalService 帐户下运行(该帐户再次没有此特定方法的权限)。因此,您会在 MSDN 文档中找到解决方案是检查 ServiceInstaller 中是否存在事件源,如果不存在,则在安装程序中创建源。

于 2009-10-12T13:36:43.997 回答
1

您是您机器上的本地管理员吗?如果是这样,请将以下代码行放在 Windows 服务的构造函数的顶部:

System.Diagnostics.Debugger.Break();

当服务开始运行时,它会到达这个断点,允许你跳转到 Visual Studio。然后,您可以从那里进行调试,直到发现异常发生的位置。

于 2009-09-03T16:53:59.043 回答
0

去获取进程监视器的副本并观察会发生什么 - 您应该将问题显示为失败结果,您可以从那里进行调查......

编辑:澄清一下,它是来自微软(sysinternals)的免费工具,它按照它在锡上所说的做:)

于 2009-09-03T14:56:37.867 回答
0

只是猜测:您的 .exe 文件是否位于网络文件夹中?还是被标记为“从网上下载”?因为在这种情况下,.NET Framework 将分配给它的权限比它直接在本地驱动器上且未标记为从 Internet 下载时要少。

于 2009-09-03T17:16:18.670 回答