10
votes

Pourquoi utiliser ConfigurationManager.Getsection Cause "SecurityException: la demande a échoué" mais ConfigurationManager.OpenExEnfiguration n'est pas?

J'ai quelque chose de curieux que j'espère qu'un expert .NET puisse m'aider.

J'ai une section de configuration personnalisée et pour en obtenir la saisie, je le fais: P>

C:\Users\Public\configtest>AppConfigTestConsoleApplication.exe
First method failed
System.Configuration.ConfigurationErrorsException: An error occurred creating the configuration section handler for testSection: Request failed. (C:\Users\Public\configtest\AppConfigTestConsoleApplication.exe.Config line 10) ---> System.Security.SecurityException: Request failed.
   at System.RuntimeMethodHandle.PerformSecurityCheck(Object obj, RuntimeMethodHandleInternal method, RuntimeType parent, UInt32 invocationFlags)
   at System.RuntimeMethodHandle.PerformSecurityCheck(Object obj, IRuntimeMethodInfo method, RuntimeType parent, UInt32 invocationFlags)
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.ConstructorInfo.Invoke(Object[] parameters)
   at System.Configuration.TypeUtil.InvokeCtorWithReflectionPermission(ConstructorInfo ctor)
   at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.CreateSectionImpl(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader)
   at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.CreateSectionWithRestrictedPermissions(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader)
   at System.Configuration.RuntimeConfigurationRecord.CreateSection(Boolean inputIsTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader)
   at System.Configuration.BaseConfigurationRecord.CallCreateSection(Boolean inputIsTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader, String filename, Int32 line)
   --- End of inner exception stack trace ---
   at System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecordsectionRecord, Object parentResult)
   at System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
   at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName)
   at System.Configuration.ConfigurationManager.GetSection(String sectionName)
   at AppConfigTestConsoleApplication.Program.Main()
Action: 'Demand'
Demanded: '<PermissionSet class="System.Security.PermissionSet"
version="1"
Unrestricted="true"/>
'
RefusedSet: ''
GrantedSet: ''
Second Method worked: 10


5 commentaires

Obtenez la sécurité intérieureException pour la ConfigurationErrorSexception et vider ses propriétés, en particulier l'action, la demande, le refusée et l'octroi. Cela vous donnera plus d'informations sur ce qui se passe.


Il y a un bug connu dans 4.0 lorsqu'il est en cours d'exécution sur une part de réseau, mais cela ne semble pas être le cas ici. Il pourrait être intéressant de tenter le correctif de toute façon: support.microsoft.com/kb/2580188


@fsimonazzi - merci. J'ai ajouté les propriétés de l'exception de sécurité à l'application de test et mis à jour la sortie - ne semble pas que cela aide cependant.


@KMP non, cela n'ajoute pas beaucoup de fond. Il semble que l'Assemblée ne soit pas pleinement confiée sur le serveur. Quelle version de .NET utilisez-vous? Semble être la même chose que

3 Réponses :


6
votes

configurationManager.Getsection (chaîne) < / code> :

récupère un fichier de configuration obtenu en fusionnant le fichier de configuration de l'application, le fichier de configuration de l'utilisateur local et le fichier de configuration d'itinérance.

ConfigurationManager.opénexeconfiguration (ConfigurationUserLevel) :

Le paramètre userlevel détermine l'emplacement du fichier de configuration en cours d'ouverture en indiquant s'il n'a pas de niveau utilisateur (le fichier de configuration est dans le même répertoire que l'application)

Alors, ils ouvrent différents fichiers. Jetez un coup d'œil en utilisant ProcessMonitor pour savoir quels fichiers sont accessibles et pourquoi une exception se produit et sur quel fichier.


1 commentaires

Merci pour la réponse - J'ai rencontré moniteur de processus, mais rien ne m'a sauté à moi (je suis sûr que je suis dense) - Pouvez-vous recommander un filtre peut-être?



10
votes

J'ai eu ce même comportement lorsque l'assemblage a été "bloqué" (sous l'onglet Propriétés du fichier). Les fichiers ont été envoyés par courrier électronique via un zip vers l'administrateur. Lorsqu'il a sauvegardé la pièce jointe, le bit de bloc a été ajouté ... Tout comme lorsque vous téléchargez un fichier sur Internet. Après avoir effacé le bloc, cela a bien fonctionné.


1 commentaires

Génial - Merci - c'est-à-dire que j'ai examiné les propriétés du fichier pour mon fichier de configuration, dans l'onglet Général de la section Sécurité, il a indiqué que le fichier peut être bloqué afin que j'ai cliqué sur "débloquer" et cela a bien fonctionné.



0
votes

Je sais que c'est un vieux fil, mais j'ai rencontré ce problème récemment lorsque vous travaillez avec un client et je pensais poster une autre suggestion. Dans mon cas, la question utilisait une méthode de configuration non statiqueManager, qui peut provoquer une exception SecurityException dans certaines conditions spécifiques (ciblage de l'application .NET Framework 4 et installée sur un lecteur réseau, et dans ce cas, la mise à jour de Windows est également désactivée). Voici plus d'informations sur le problème et un correctif de Microsoft:

https://support.microsoft.com/ EN-US / AIDE / 2580188 / FIX-System.Security.SecurityException - On se produit-quand-a-.NET-Framewrad-Framework-4-APPLICATION-APPLICATION - Appels-A-statiques-Méthode-in-the-System.Configuration .ConfigurationManager-Class-Runs-on-A-Network-Partager


0 commentaires