ExceptionPolicy.HandleException не устанавливает источник событий для входа в реестр, если XBAP работает вне отладчика - PullRequest
0 голосов
/ 06 мая 2010

Я использую блок приложения ведения журнала (из библиотеки Microsoft Enterprise) для регистрации исключений в средстве просмотра событий, возникающих в моем приложении WPF XBAP.

Если я запускаю XBAP в отладчике из Visual Studio, запись источника событий для моего приложения автоматически создается в реестре по адресу:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Eventlog \ Application \ MyApp

Это происходит в точке, где ExceptionPolicy.HandleException() называется.

Однако, если я запускаю XBAP вне среды IDE непосредственно из файловой системы или из ее опубликованного местоположения, запись реестра не добавляется. Следовательно, регистрация не ведется.

Я могу только предположить, что это проблема безопасности с запущенными приложениями XBAP, и у них нет доступа для записи в Реестр. Это настройка в моем проекте? Есть идеи, почему это может происходить?

Любая помощь высоко ценится.

1 Ответ

1 голос
/ 06 мая 2010

Вы правы в том, что это проблема разрешения.

Если вы попытаетесь войти в журнал событий, а источник событий не существует, среда выполнения попытается создать запись реестра для источника событий. Если у вас нет разрешения, то System.Security.SecurityException с сообщением «Запрошенный доступ к реестру не разрешен». брошен Корпоративная библиотека перехватывает это исключение и пытается войти, говоря, что не может записать сообщение. Если это также не помогает, исключение проглатывается.

Приложение работает в изолированной программной среде с частичным доверием , поэтому у него не будет разрешения на создание разделов реестра. Вы можете попробовать настроить приложение для запуска как Приложение с полным доверием . * * * * * * * * * * * * * * * * * * * * * * * * * 1011

Эта проблема также часто возникает при входе в систему из ASP.NET, и обычным решением является создание необходимых разделов реестра во время процесса развертывания. Для WPF это кажется немного неправильным, но возможно ли создать установщик Windows (.msi), который устанавливает разделы реестра? Тогда приложению не нужно будет писать в реестр (хотя все равно нужно будет читать из реестра, так что, надеюсь, с этим проблем с разрешением не будет!).

ОБНОВЛЕНИЕ в ответ на комментарий

Как указано в URL выше :

Да, это недостаток дизайна в нашем процесс хостинга. Вы получаете "полное доверие" с точки зрения CLR, но не в условия безопасности NT. Мы постараемся решить эту проблему в будущем релиз.

Я не уверен, была ли проблема решена или нет, но это может быть то, что вы видите.

...