Ошибка RegistryPermission при вызове из консольного приложения C#
Просто ищу указатель, прежде чем идти по неверному пути. Я написал небольшое консольное приложение на C#, которое открывает, читает, записывает и удаляет из реестра наших пользователей под HKEY_LOCAL_MACHINE и HKEY_CURRENT_USER.
Конечно, я заставил его работать на моем ПК и на всех тестовых ПК, но один из наших клиентов получает ошибку при попытке запустить.exe
System.Security.SecurityException: сбой запроса разрешения типа "System.Security.Permissions.RegistryPermission, mscorlib, Version=2.0.0.0, Culture= нейтральный, PublicKeyToken=b77a5c561934e089".
в System.Security.CodeAccessSecurityEngine.Check(Требование объекта, StackCrawlMark& stackMark, Boolean isPermSet) в System.Security.CodeAccessPermission.Demand() в Microsoft.Win32.RegistryKey.CheckSubKeyReadPermission(StringPowerSigner.Check) subkeyName, Boolean > subKeyWritable) в Microsoft.Win32.RegistryKey.OpenSubKey(имя строки, логическая запись) в EstateMasterClearReg.Program.Main(String[] args)
Действие, которое не удалось, было:
Требовать. Тип первого неудачного разрешения: System.Security.Permissions.RegistryPermission. Зона сборки, на которой произошел сбой, была: Интрасеть.
Поскольку я не смогу проверить это на клиентских машинах (и они сказали, что у них есть.exe, работающий локально и вошедший в систему как администратор), я могу сделать что-нибудь, чтобы убедиться, что приложение будет работать на любом машина?
Нужно ли использовать ключ строгого имени и AllowPartiallyTrustedCallers или я должен использовать System.Security.Permissions.RegistryPermission?
Спасибо за вашу помощь.
1 ответ
Похоже, они запускают ваш исполняемый файл по сети. Пусть они попробуют скопировать его на локальный жесткий диск и запустить снова. Разрешения, назначенные исполняемому файлу, отличаются между запуском его из общего сетевого ресурса и запуском из локальной файловой системы.
Кроме того, возможно, что они изменили параметры безопасности по умолчанию, так что даже если он работает локально, он считается частью зоны интрасети. Проверьте это тоже.
Здесь также могут быть полезны советы:
http://blogs.msdn.com/shawnfa/archive/2003/06/20/57023.aspx
Обратите внимание, что если вы дадите своей сборке строгое имя, вам все равно потребуется изменить локальную политику безопасности, чтобы дать вашей сборке соответствующие разрешения. Строгое имя само по себе не дает необходимого дополнительного разрешения.