我正在以下链接中进行演练:http: //msdn.microsoft.com/en-us/library/zt39148a%28VS.80%29.aspx
我已经完全按照它逐行进行了。我成功安装了该服务,但是,当我尝试运行它时,出现以下错误消息:
“在 MyNewService.Exe [5292] 中发生未处理的异常(“System.Security.SecurityException”)。
我已经看到对很多人来说它有效,但有些人得到了这个例外,尽管我找不到答案。有人有想法吗?谢谢。
我正在以下链接中进行演练:http: //msdn.microsoft.com/en-us/library/zt39148a%28VS.80%29.aspx
我已经完全按照它逐行进行了。我成功安装了该服务,但是,当我尝试运行它时,出现以下错误消息:
“在 MyNewService.Exe [5292] 中发生未处理的异常(“System.Security.SecurityException”)。
我已经看到对很多人来说它有效,但有些人得到了这个例外,尽管我找不到答案。有人有想法吗?谢谢。
EventLog.SourceExists方法将导致此异常。最常见的原因是它尝试访问所有事件日志(包括安全日志),在 Vista 中默认情况下您将无权访问这些日志。另一个原因可能是在事件日志中找不到您要查找的源(我觉得这很奇怪!)。
解决方法:
bool sourceFound = false;
try
{
sourceFound = EventLog.SourceExists("MySource");
}
catch (SecurityException)
{
sourceFound = false;
}
但是,另一种选择是简单地提升您的权限,因为您按照教程一步一步地操作您的服务将在 LocalService 帐户下运行(该帐户再次没有此特定方法的权限)。因此,您会在 MSDN 文档中找到解决方案是检查 ServiceInstaller 中是否存在事件源,如果不存在,则在安装程序中创建源。
您是您机器上的本地管理员吗?如果是这样,请将以下代码行放在 Windows 服务的构造函数的顶部:
System.Diagnostics.Debugger.Break();
当服务开始运行时,它会到达这个断点,允许你跳转到 Visual Studio。然后,您可以从那里进行调试,直到发现异常发生的位置。
去获取进程监视器的副本并观察会发生什么 - 您应该将问题显示为失败结果,您可以从那里进行调查......
编辑:澄清一下,它是来自微软(sysinternals)的免费工具,它按照它在锡上所说的做:)
只是猜测:您的 .exe 文件是否位于网络文件夹中?还是被标记为“从网上下载”?因为在这种情况下,.NET Framework 将分配给它的权限比它直接在本地驱动器上且未标记为从 Internet 下载时要少。