【问题标题】:System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: SecuritySystem.Security.SecurityException:找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性
【发布时间】: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”命令。

标签: c# windows windows-services event-log


【解决方案1】:

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

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

【讨论】:

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

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

【讨论】:

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

以管理员身份运行

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

【讨论】:

  • 我浪费了 2 个小时。谢谢!
【解决方案4】:

您可能正在尝试使用

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

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

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

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

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

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

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

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

【讨论】:

    【解决方案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 解决了该问题。

      【讨论】:

        猜你喜欢
        • 2014-08-05
        • 1970-01-01
        • 2019-04-03
        • 1970-01-01
        • 1970-01-01
        • 2011-10-19
        • 2012-03-22
        • 1970-01-01
        相关资源
        最近更新 更多