System.Security.SecurityException: источник не найден, но не удалось найти некоторые или все журналы событий.Недоступные журналы: безопасность - PullRequest
67 голосов
/ 28 апреля 2011

Я пытаюсь создать службу 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();
    }
}

Ответы [ 6 ]

169 голосов
/ 09 марта 2012

Я получил то же исключение при попытке установить службу из командной строки при использовании installutil в Windows 7. Решением было открыть командную строку с правами администратора и затем запустить installutil.1004 * Также вам может оказаться проще использовать инфраструктуру типа TopShelf для размещения ваших служб, поскольку она управляет всей конфигурацией настройки от имени и описания службы до способа восстановленияпроцесс будет работать.Это также позволяет легко запускать службу из среды IDE при ее отладке.

49 голосов
/ 26 апреля 2013

Запустите командную строку от имени администратора. Это решит вашу проблему

36 голосов
/ 17 июля 2015

Запуск от имени администратора

Это очень распространенная проблема, которую пропускают программисты

9 голосов
/ 23 января 2014

Я решаю эту же проблему, открывая консоль разработчика VS2013 с правами администратора.

6 голосов
/ 13 июля 2016

Возможно, вы пытаетесь установить службу, используя

  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'
    • OK
  2. Перейдите к указанному выше пути
  3. Щелкните правой кнопкой мыши по нужному пути
  4. Убедитесь, что оба флажка Чтение и Полный доступ разрешены для администраторов
  5. Нажмите Применить и ОК
  6. Повторите тот же процесс для другого пути
4 голосов
/ 29 апреля 2011

Если вам предлагается ввести имя пользователя и пароль, то где-то где-то устанавливается значение Account = ServiceAccount.User - это единственный способ, который может (должен) произойти.Возможно, ваш код в приведенном выше комментарии не выполняется, или он изменяется обратно при последующем выполнении кода.

Что касается вашего второго абзаца, в целом, я думаю, что служба подойдет для этого, если выне хочу, чтобы его видели на консоли или запускали как задачу.Я не уверен, понимаю ли я часть о том, как запускать его как ASP.NET и что он не позволяет вам видеть базу данных ...

Наконец, в вашем последнем абзаце я не могу говорить с NullExeceptionне зная больше о том, что происходит в коде вашего установщика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...