System.Security.SecurityException:找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性

Posted

技术标签:

【中文标题】System.Security.SecurityException:找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性【英文标题】:System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security 【发布时间】:2011-08-14 21:43:09 【问题描述】:

我正在尝试创建一个 Windows 服务,但是当我尝试安装它时,它回滚给我这个错误:

System.Security.SecurityException: 未找到来源,但部分或全部 无法搜索事件日志。 无法访问的日志:安全性。

我不知道这意味着什么 - 我的应用程序只有最低限度,因为我只是先测试一下。

我的安装程序代码:

namespace WindowsService1

    [RunInstaller(true)]
    public partial class ProjectInstaller : System.Configuration.Install.Installer
    
        public ProjectInstaller()
        
            //set the privileges
            processInstaller.Account = ServiceAccount.LocalSystem;
            processInstaller.Username = null;
            processInstaller.Password = null;

            serviceInstaller.DisplayName = "My Service";
            serviceInstaller.StartType = ServiceStartMode.Manual;

            //must be the same as what was set in Program's constructor
            serviceInstaller.ServiceName = "My Service";

            this.Installers.Add(processInstaller);
            this.Installers.Add(serviceInstaller);
        

        private void serviceProcessInstaller1_AfterInstall(object sender, InstallEventArgs e)
        
        

        private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
        
        
    

我的服务代码:

public partial class Service1 : ServiceBase

    public Service1()
    
        this.ServiceName = "My Service";
    

    protected override void OnStart(string[] args)
    
        base.OnStart(args);
    

    protected override void OnStop()
    
        base.OnStop();
    

【问题讨论】:

“我将 Account 和 Password 都设置为 null,Account 设置为 Local System。” - 你是如何将同一个属性设置为两个不同的东西的……?跨度> ` processInstaller.Account = ServiceAccount.LocalSystem; processInstaller.Username = null; processInstaller.Password = null; ` sry 我没注意到我说了两次帐户:/ 如果您发布了一些代码,我们或许可以为您提供帮助。 尝试以管理员权限运行“installUtil”命令。 【参考方案1】:

在 Windows 7 中使用 installutil 时尝试从命令行安装服务时遇到了同样的异常。解决方案是以管理员身份打开命令行,然后运行 ​​installutil。

此外,您可能会发现使用TopShelf 之类的框架来托管您的服务更容易,因为它可以管理从服务名称和描述到恢复过程如何工作的所有setup configuration。它还允许您在调试时从 IDE 内部轻松启动服务。

【讨论】:

这是对我的修复。干杯。 不敢相信它发生在我身上。又来了! 理想情况下,这应该设置为答案! :) 这是我的问题。一项服务很好,但安装第二项服务失败。 谢谢。这解决了我的问题【参考方案2】:

以管理员身份运行命令提示符。 它会解决你的问题

【讨论】:

这对我有用。即使我的帐户在管理员组中【参考方案3】:

以管理员身份运行

这是程序员经常忽略的一个非常普遍的问题

【讨论】:

我浪费了 2 个小时。谢谢!【参考方案4】:

您可能正在尝试使用

安装服务
    没有足够权限的用户帐户 或者 具有管理员权限但未在“管理员模式”下运行命令提示符的用户。

具体来说,这种情况下的问题是在服务安装期间创建了一些 EventLog 注册表项。

解决此问题的一种方法是确保您在管理员模式下运行命令提示符。 (右键单击 > 以管理员身份运行)

我也遇到过一些情况,由于某些注册表项对管理员帐户没有“完全控制”权限,这种方法仍然无法解决 SecurityException 问题。

以下键应为管理员设置“完全控制”,以便服务能够写入事件日志:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application

这可以通过以下方式完成:

    调用 Windows 注册表编辑器 运行 [Win + R] 键入“注册表编辑器” 好的 导航到上面列出的路径 右键单击所需路径 确保读取完全控制权限复选框都为管理员打勾 点击应用确定 对另一条路径重复相同的过程

【讨论】:

【参考方案5】:

我通过使用管理权限打开 VS2013 开发者控制台解决了同样的问题。

【讨论】:

【参考方案6】:

如果系统提示您输入用户名和密码,那么某处的某处设置为 Account = ServiceAccount.User - 这是可能(应该)发生的唯一方式。也许您在上面注释中的代码没有被执行,或者它正在被稍后执行的代码改回来。

就您的第二段而言,一般来说,如果您不希望它在控制台上显示或作为任务运行,我认为服务会很好。我不确定我是否理解将其作为 ASP.NET 运行并且不允许您查看数据库的部分...

最后,在您的最后一段中,如果不了解您的安装程序代码中发生的事情,我无法与 NullExeception 交谈。

【讨论】:

至于第二段,我有很多代码正在处理,正如我所提到的,它提取 RSS 提要、收集数据、解析它并将其存储到数据库中。我有一个 ASP.NET Web 应用程序,因为我为用户提供了一个界面,以便他/她可以看到基于我数据库中的数据的建议。如果有更好的方法可以让我在 ASP.NET 中使用后台进程,我会很乐意选择..有没有办法? @michelle,尝试删除设置AccountUsernamePassword 的三行代码。我猜测这是在安装程序查看属性并看到默认的ServiceAccount.User 之后被调用的,然后要求提供凭据,然后用空值覆盖它。尝试在属性页上设置它。只是在黑暗中刺伤。 @michelle,就您评论的另一部分而言,您提到了在“ASP.NET 中运行后台进程”。抱歉,这超出了我的专业范围。 如果您尝试做的事情可以完成,它可能需要AJAX。 AJAX 提供了更丰富的 Web UI 体验(例如,Google Maps 使用 AJAX,可能与您在结果中键入内容时出现的 Google 搜索一样)。您可能会更幸运地开始一个专门标记为那个的新问题。【参考方案7】:

我在尝试测试是否存在 EventLog 时遇到此错误(在 OP 中)

   if (!EventLog.SourceExists("applicatioName"))
         EventLog.CreateEventSource("applicatioName", "Application");

以管理员身份运行 VisualStudio 解决了该问题。

【讨论】:

以上是关于System.Security.SecurityException:找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性的主要内容,如果未能解决你的问题,请参考以下文章