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

mic*_*lle 68 c# windows windows-services event-log

我正在尝试创建一个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)
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的服务代码:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Whi*_*ght 177

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

此外,您可能会发现使用TopShelf等框架来托管服务更容易,因为它管理从服务的名称和描述到恢复过程的工作方式的所有设置配置.它还允许您在调试时从IDE内部轻松启动服务.

  • 这完全解决了我的问题!谢谢. (6认同)
  • 理想情况下,这应该设置为答案!:) (4认同)
  • 这是我的修复.干杯. (3认同)

小智 50

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

  • 这对我有用.即使我的帐户在管理员组中 (2认同)

Ome*_*r K 37

以管理员身份运行

这是程序员遗漏的一个非常常见的问题

  • 我浪费了2个小时。谢谢! (2认同)

Mar*_*aya 9

我通过打开具有管理权限的VS2013开发者控制台解决了同样的问题.


kei*_*h.g 6

您可能正在尝试使用安装服务

  1. 没有足够权限的用户帐户或
  2. 具有管理员权限但未在"管理员模式"下运行命令提示符的用户.

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

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

我还遇到过一些情况,由于某些注册表项没有管理员帐户的"完全控制"权限,此方法仍然无法解决SecurityException问题.

以下密钥应为管理员设置"完全控制",以便服务能够写入EventLog:

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

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

  1. 调用Windows注册表编辑器
    • 运行[Win + R]
    • 输入'regedit'
  2. 导航到上面列出的路径
  3. 右键单击所需的路径
  4. 确保为管理员选中了" 读取"和" 完全控制"权限复选框
  5. 单击" 应用"和" 确定
  6. 对其他路径重复相同的过程


Jim*_*Jim 5

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

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

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