Я работаю над попыткой портировать приложение ASP.NET с Server 2003 (и IIS6) на Server 2008 (IIS7).
Когда я пытаюсь зайти на страницу в браузере, я получаю это:
Ошибка сервера в приложении '/'
Исключение безопасности
Описание: приложение попыталось выполнить операцию, не разрешенную политикой безопасности. Чтобы предоставить этому приложению необходимые разрешения, обратитесь к системному администратору или измените уровень доверия приложения в файле конфигурации.
Сведения об исключении: System.Security.SecurityException: источник не найден, но не удалось найти некоторые или все журналы событий. Недоступные журналы: безопасность
Ошибка источника:
Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информацию о происхождении и местонахождении исключения можно определить с помощью приведенной ниже трассировки стека исключений.
Трассировки стека:
[SecurityException: источник не найден, но не удалось найти некоторые или все журналы событий. Недоступные журналы: безопасность.]
System.Diagnostics.EventLog.FindSourceRegistration (строковый источник, строковое имя машины, логическое чтение только) +562 System.Diagnostics.EventLog.SourceExists (строковый источник, строковое имя машины) +251
[Надрез]
Вот что я сделал, чтобы попытаться решить эту проблему:
Дайте «Все» разрешение на полный доступ к ключу
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security
. Это сработало. Но, естественно, я не могу сделать это в производстве. Поэтому я удалил разрешение «Все» после запуска приложения в течение нескольких минут, и ошибка снова появилась.Я создал источник в журнале приложений и журнале безопасности (и я убедился, что он существует через regedit) во время установки с повышенными разрешениями, но ошибка осталась.
Я дал приложению полный уровень доверия в
web.config
файле (и с помощьюappcmd.exe
), но безрезультатно.
У кого-нибудь есть понимание того, что здесь можно сделать?
PS: это продолжение этого вопроса . Я следовал за данными ответами, но безрезультатно (см. № 2 выше).
Ответы:
Чтобы дать
Network Service
разрешение на чтениеEventLog/Security
ключа (как предложено Firenzi и royrules22), следуйте инструкциям на http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspxStart
Затем выберитеRun
regedt32
илиregedit
Перейдите / разверните следующую клавишу:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security
Щелкните правой кнопкой мыши на этой записи и выберите Разрешения
Добавить
Network Service
пользователяДайте разрешение на чтение
ОБНОВЛЕНИЕ: описанные выше действия подходят для машин разработчиков, где вы не используете процесс развертывания для установки приложения.
Однако, если вы развертываете свое приложение на других компьютерах, рассмотрите возможность регистрации источников журнала событий во время установки, как это предлагается в SailAvid и Nicole Calinoiu. .
Я использую функцию PowerShell (вызов в Octopus Deploy.ps1)
источник
Проблема в том, что
EventLog.SourceExists
пытается получить доступ кEventLog\Security
ключу, доступ к которому разрешен только администратору.Типичный пример входа в программу C #
EventLog
:Тем не менее, следующие строки не будут выполнены, если у программы нет прав администратора, а ключ не найден в папке
EventLog\Application
asEventLog.SourceExists
, после чего попытается получить доступEventLog\Security
.Поэтому рекомендуется создать сценарий установки, который создает соответствующий ключ, а именно:
Затем можно удалить эти две строки.
Вы также можете создать
.reg
файл для создания раздела реестра. Просто сохраните следующий текст в файлcreate.reg
:источник
Решением было дать разрешение на чтение учетной записи «Сетевая служба» для ключа EventLog / Security.
источник
Для меня работало только предоставление разрешений «Чтение» для «NetworkService» всей ветви «EventLog» .
источник
У меня была очень похожая проблема с консольной программой, которую я разрабатываю под VS2010 (обновленной с VS2008 под XP). Моя прога использует EnLib для некоторой регистрации. Ошибка была вызвана тем, что у EntLib не было разрешения зарегистрировать новый источник событий.
Поэтому я однажды запустил мою скомпилированную прогу как Администратор : она зарегистрировала источник события. Затем я вернулся к разработке и отладке изнутри VS без проблем.
(Вы также можете обратиться к http://www.blackwasp.co.uk/EventLog_3.aspx , это помогло мне
источник
Это исключение происходило для меня из консольного приложения .NET, работающего как запланированная задача, и я пытался сделать в основном то же самое - создать новый источник событий и записать его в журнал событий.
В конце концов, установка полных разрешений для пользователя, под которым выполнялась задача на следующих ключах, сделала мое дело:
источник
eventlog\Application
иeventlog\Security
; полный контроль требуетсяeventlog
только для пользователя root.Я пытаюсь почти все здесь, чтобы решить эту проблему ... Я разделяю здесь ответ, который помогает мне:
в http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx , спасибо Майклу Фрайдгейму
источник
Я столкнулся с той же проблемой, но мне пришлось подняться на один уровень и дать всем полный доступ к ключу HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \, вместо того, чтобы перейти к безопасности, которая прояснила проблему для меня.
источник
Та же проблема на Windows 7 64bit. Запустите, как администратор решил проблему.
источник
Новый ключ с именем источника должен быть создан в HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Приложение в regEdit при использовании System.Diagnostics.EventLog.WriteEntry ("SourceName", "ErrorMessage", EventLogEntryType.Error);
Так что в основном ваш пользователь не имеет разрешения на создание ключа. Может сделать следующее в зависимости от пользователя, которого вы используете из значения Identity в расширенных настройках пула приложений:
Щелкните правой кнопкой мыши по ключу EventLog и выберите опцию Permissions ... 3. Добавьте своего пользователя с полным доступом к элементу управления.
-Если вы используете «NetworkService» добавьте пользователя NETWORK SERVICE
-Если вы используете "ApplicationPoolIdentity" добавьте IIS APPPOL {имя пула приложений} (используйте местоположение на локальном компьютере при поиске пользователя).
-Если вы используете «LocalSystem», убедитесь, что у пользователя есть права администратора. Это не рекомендуется для уязвимостей.
Повторите шаги с 1 по 3 для HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Security
Для отладки в Visual Studio я использую «NetworkService» (это пользователь ASP.NET), а когда сайт был опубликован, я использовал «AppicationPoolIdentity».
источник
К вашему сведению ... моя проблема была в том, что случайно выбрал "Local Service" в качестве учетной записи на свойствах ProcessInstaller вместо "Local System". Просто упомяну о ком-то еще, кто следовал учебному пособию по MSDN, поскольку выбор Местной службы показывает сначала, и я не обращал пристального внимания ....
источник
Похоже, что существует очевидное решение, и я пока не вижу огромного недостатка, по крайней мере там, где непрактично получать права администратора для создания собственного источника событий: используйте тот, который уже есть.
Два из них, которые я начал использовать, - это «.Net Runtime» и «Application Error», оба из которых, похоже, будут присутствовать на большинстве машин.
Основными недостатками являются невозможность группировки по этому событию и то, что у вас, вероятно, нет ассоциированного идентификатора события, что означает, что запись журнала может иметь префикс с чем-то вроде «Описание идентификатора события 0 из источника .Net Время выполнения не может быть найдено ... ", если вы его опускаете, но журнал входит в систему, и вывод выглядит в целом разумным.
Результирующий код выглядит примерно так:
Конечно, поскольку всегда есть вероятность, что вы находитесь на машине, у которой нет источников этих событий по какой-либо причине, вы, вероятно, захотите
try {} catch{}
обернуть ее на случай, если она не удастся и ухудшит ситуацию, но события теперь можно сохранить.источник
Я не работаю над IIS, но у меня есть приложение, которое выдает ту же ошибку на коробке 2K8. Он отлично работает на коробке 2K3.
Мое решение было «Запуск от имени администратора», чтобы дать приложению повышенные права, и все работает счастливо. Я надеюсь, что это поможет вам в правильном направлении.
Windows 2008 - это права / разрешения / повышение прав и отличается от Windows 2003, gar.
источник
Привет, я столкнулся с той же проблемой, когда разрабатывал приложение и хотел установить его на удаленном ПК, я исправил это, выполнив следующие действия:
1) Перейдите в свой реестр, найдите: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application (??? YOUR_SERVICE_OR_APP_NAME ???)
Обратите внимание, что «(??? YOUR_SERVICE_OR_APP_NAME ???)» - это имя службы приложения, которое вы определили при создании развертывания .NET, например, если вы назвали свое новое приложение «Мое новое приложение», ключом будет: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application \ My New app
Примечание 2: В зависимости от того, в какой EventLog вы пишете, вы можете найти в окне DEV, \ Application \ (как отмечено выше), или также (\ System) или (\ Security), в зависимости от того, в какое событие пишет ваше приложение, в основном (\ Приложение) должно быть все время в порядке.
2) Находясь на клавише выше, из меню; Выберите «FILE» -> «Export», а затем сохраните файл. (Примечание: это создаст необходимые параметры реестра, когда приложению потребуется доступ к этому ключу для записи в средство просмотра событий), новый файл будет .REG-файлом, для аргумента ради, назовите его «My New App.REG». "
3) При развертывании в PRODuction проконсультируйтесь с системным администратором сервера (SA), передайте файл «My New App.REG» вместе с приложением и попросите SA установить этот файл REG, как только это будет сделано (как администратор), это будет создайте ключ для вашего приложения.
4) Запустите ваше приложение, оно не должно иметь доступа ни к чему другому, кроме этого ключа.
Проблема должна быть решена к настоящему времени.
Причина:
При разработке приложения, которое записывает что-либо в EventLog, ему потребуется ключ для него в реестре Eventlog, если этот ключ не найден, он попытается создать его, что затем не удается из-за отсутствия разрешений для этого. Вышеописанный процесс аналогичен развертыванию приложения (вручную), в то время как мы создаем его сами, и вам не нужно испытывать головную боль, поскольку вы не настраиваете реестр, добавляя разрешения для ВСЕГО, что создает риск для безопасности на производственных серверах.
Я надеюсь, что это помогает решить это.
источник
Хотя ответ установщика является хорошим ответом, он не всегда практичен при работе с программным обеспечением, которое вы не писали. Простой ответ - создать журнал и источник событий с помощью команды PowerShell New-EventLog ( http://technet.microsoft.com/en-us/library/hh849768.aspx ).
Запустите PowerShell от имени администратора и выполните следующую команду, изменив нужное имя журнала и источник.
New-EventLog -LogName Application -Source TFSAggregator
Я использовал его, чтобы решить исключение журнала событий, когда Aggregator запускает проблему из кодекса.
источник
Была похожая проблема со всеми нашими серверами 2008 года. Журнал безопасности вообще перестал работать из-за объекта групповой политики, который забрал группу Authenticated Users и разрешение на чтение от ключа
HKLM\System\CurrentControlSet\Services\EventLog\security
Возврат этого в соответствии с рекомендацией Microsoft устранил проблему. Я подозреваю, что чтение всех аутентифицированных пользователей на более высоком уровне также исправит вашу проблему.
источник
Я ударил аналогичный вопрос - в моем случае , содержащегося Источник
<
,>
символы. Я бы сказал, что 64-битные машины используют новую четную базу log - xml, и эти символы (из строки) создают недопустимый xml, что вызывает исключение. Возможно, это следует учитывать в вопросе Microsoft - неправильно обрабатывать источник (имя / строку).источник
Решение очень простое - запустить приложение Visual Studio в режиме администратора!
источник
Мое приложение устанавливается на клиентских веб-серверах. Вместо того, чтобы возиться с разрешениями сетевой службы и реестром, я решил проверить
SourceExists
и запуститьCreateEventSource
мой установщик.Я также добавил в приложение try / catch,
log.source = "xx"
чтобы установить для него известный источник, если бы мой источник событий не был создан (это появилось бы только в том случае, если вместо горячей переустановки .dll вместо .dll).источник
попробуйте ниже в web.config
источник
У меня была эта проблема при запуске приложения в VS. Все, что мне нужно было сделать, это запустить программу от имени администратора один раз, а затем я мог запустить ее из VS.
Для запуска с правами администратора просто перейдите в папку отладки в проводнике Windows. Щелкните правой кнопкой мыши программу и выберите «Запуск от имени администратора».
источник
Восстановление решения сработало для меня
источник