Ошибка RegistryPermission при вызове из консольного приложения C # - PullRequest
1 голос
/ 20 мая 2009

Просто ищу какой-то указатель, прежде чем идти по неверному пути. Я написал небольшое консольное приложение на 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, логическое значение isPermSet) в System.Security.CodeAccessPermission.Demand () в Microsoft.Win32.RegistryKey.CheckSubKeyReadPermission (String subkeyName) в Microsoft.Win32.RegistryKey.CheckOpenSubKeyPermission (String subkeyName, Boolean> subKeyWritable) в Microsoft.Win32.RegistryKey.OpenSubKey (имя строки, логическая запись) at EstateMasterClearReg.Program.Main (String [] args)

Не удалось выполнить действие:

Спрос. Тип первого разрешения, которое не удалось: System.Security.Permissions.RegistryPermission Зона сборки, которая провалилась, была: Intranet

Поскольку я не смогу проверить это на клиентских машинах (и они сказали, что у них есть .exe, работающий локально и вошедший в систему как администратор), я могу сделать что-нибудь, чтобы убедиться, что приложение будет бегать на любой машине?

Нужно ли использовать ключ строгого имени и AllowPartiallyTrustedCallers или мне следует использовать System.Security.Permissions.RegistryPermission?

Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 20 мая 2009

Похоже, они запускают ваш исполняемый файл по сети. Пусть они попробуют скопировать его на локальный жесткий диск и запустить снова. Разрешения, назначенные исполняемому файлу, отличаются между запуском его из общего сетевого ресурса и запуском из локальной файловой системы.

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

Здесь также могут быть полезны советы:

http://blogs.msdn.com/shawnfa/archive/2003/06/20/57023.aspx

Обратите внимание, что если вы дадите своей сборке строгое имя, вам все равно потребуется изменить локальную политику безопасности, чтобы дать вашей сборке соответствующие разрешения. Строгое имя само по себе не дает необходимого дополнительного разрешения.

...