Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Настройка доступа сборки к реестру.


Автор: HAL707 17.12.2007, 18:36
Всем привет.
В общем такая ситуация. Имеется класс, лежащий в отдельной сборке, в котором создается новая категория счетчика производительности:
Код

PerformanceCounterCategory.Create(...)

Для создания этой категории создаются записи в реестре (которые описывают эту категорию и её счетчики).
Проблема собственно в том, что это сборка используется в веб-сервисе, запущенном из под IIS и при попытке создания категории вылетает такой ерор:
Код

System.Security.SecurityException: Requested registry access is not allowed.
   at System.ThrowHelper.ThrowSecurityException(ExceptionResource resource)
   at Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable)
 и т.д...


Собственно вопрос в том, как дать сборке права на запись в реестр. 

Пробовал так:
Код

[assembly: RegistryPermission(SecurityAction.RequestMinimum, All = "HKEY_LOCAL_MACHINE")]
//или
//[assembly: PerformanceCounterPermission(SecurityAction.RequestMinimum, PermissionAccess=PerformanceCounterPermissionAccess.Write)]

не помогает. Та же ошибка.

Если кто знает, как решить проблему, плиз поделитесь.

Автор: tol05 17.12.2007, 19:10
попробуй
Код

[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum, Unrestricted = true)]

у меня с ним http://msdn2.microsoft.com/en-us/library/microsoft.win32.registrykey.aspx получился.

Автор: altarvic 18.12.2007, 07:44
Это CAS (Code access security) не дает писать в реестр.
Сама сборка не сможет повысить себе полномочия, если она запущена под урезанными правами (в случае вебсервиса это так). Задавайте ручками.
Администрирование - .NET Framework Configuration - Runtime Security Policy - Increase Assembly Trust

Автор: HAL707 18.12.2007, 12:51
tol05, не работает. altarvic наверное правильно сказал - не хватает прав.
Но к сожалению ручками их задавать в моем случае недопустимо.

Автор: tol05 18.12.2007, 13:10
Может подписать сборку и использовать AllowPartiallyTrustedCallersAttribute для ее вызова? Тогда у этой сборки будет больше прав.
...
P.S. Погуглил и нашел http://www.thescripts.com/forum/thread376376.html

Автор: HAL707 18.12.2007, 14:29
tol05, так конечно можно сделать. Но опять же проблема в том, что в моем случае нельзя ничего делать со сборкой, ни строгое имя назначать, ни прав явно нарулить.

Хотя наверное все таки какими-то другими способами права получить не получится ...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)