System.Security.SecurityException: источник не найден, но некоторые или все журналы событий не могут быть найдены. Недостижимые журналы: безопасность
Я пытаюсь создать службу 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 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();
}
}
Ответы
Ответ 1
Если вам будет предложено ввести имя пользователя и пароль, то что-то, где-то установлено на Account = ServiceAccount.User
-, что единственный способ, который может (должен) произойти. Возможно, ваш код в вышеприведенном комментарии не выполняется, или он заменяется более поздним выполнением кода.
Что касается вашего второго абзаца, в целом, я думаю, что услуга была бы прекрасна для этого, если вы не хотите, чтобы он отображался на консоли или выполнялся как задача. Я не уверен, насколько я понимаю, что он запускает его как ASP.NET и не позволяет вам видеть базу данных...
Наконец, в вашем последнем абзаце я не могу говорить с NullExeception, не зная больше о том, что происходит в вашем коде установщика.
Ответ 2
Я получил то же исключение при попытке установить службу из командной строки при использовании installutil в Windows 7. Решение заключалось в том, чтобы открыть командную строку как Администратор и затем запустите installutil.
Также вам может быть проще использовать фреймворк, например TopShelf для размещения ваших сервисов, поскольку он управляет всеми настроить конфигурацию от имени и описания службы до того, как будет работать ваш процесс восстановления. Это также позволяет легко запускать службу изнутри среды IDE при ее отладке.
Ответ 3
Запустите свою командную строку как администратор.
Это решит вашу проблему.
Ответ 4
Запуск от имени администратора
Это очень распространенная проблема, которую пропускают программисты.
Ответ 5
Я решаю эту же проблему, открыв консоль разработчика VS2013 с правами администратора.
Ответ 6
Возможно, вы пытаетесь установить службу с помощью
- Учетная запись пользователя, которая не имеет достаточных прав
ИЛИ
- Пользователь с правами администратора, но не запустил командную строку в режиме администратора.
В частности, проблема в этом случае заключается в создании некоторых разделов реестра EventLog во время установки службы.
Один из способов исправить это - убедиться, что вы запускаете командную строку в режиме администратора. (Щелкните правой кнопкой мыши> Запуск от имени администратора)
Я также сталкивался с некоторыми случаями, когда этот метод все еще не решает проблему SecurityException из-за того, что некоторые ключи реестра не имеют разрешений "Полный доступ" для учетных записей администратора.
Следующие ключи должны иметь "Полный доступ" для администраторов, чтобы служба могла писать в EventLog:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application
Это может быть сделано:
- Вызов редактора реестра Windows
- Запустите [Win + R]
- Введите regedit
- OK
- Перейдите к указанному выше пути
- Щелкните правой кнопкой мыши по нужному пути
- Убедитесь, что для администраторов установлены флажки разрешений "Чтение" и "Полный доступ"
- Нажмите Применить и OK
- Повторите тот же процесс для другого пути
Ответ 7
Я получал эту ошибку (выше в OP) при попытке проверить существование EventLog
if (!EventLog.SourceExists("applicatioName"))
EventLog.CreateEventSource("applicatioName", "Application");
Запуск VisualStudio в качестве администратора решил проблему.