2011-10-04 3 views
2

Je lis un paramètre du fichier app.config en utilisant un code presque identique à celui que j'ai utilisé dans d'autres parties de l'application. Il fonctionne très bien sous Windows XP et Windows Server 2003, quand je le lance sous Windows 7 64 bits, il génère une exception:Pourquoi config.Appsettings.Settings ["MySetting"]. La valeur échoue dans Windows 7, mais pas dans les autres versions

System.NullReferenceException: référence d'objet non définie à une instance d'un objet.

string exePath = System.IO.Path.Combine(Environment.CurrentDirectory, applicationName); 

// Get the configuration file. The file name has this format appname.exe.config. 

System.Configuration.Configuration utilConfig = ConfigurationManager.OpenExeConfiguration(exePath); 
string fileName = utilConfig.AppSettings.Settings["MsgAlertWav"].Value; //<<Fails here 

ce code est simplifié, mais génère l'erreur sous Windows 7. Il est un projet .NET 3.0 compilé pour cible 32 bits. J'ai ce même code dans un autre module et il fonctionne très bien sous Windows 7.

Je suis mystifié car ce code fonctionne dans un module, mais pas dans un autre et ne génère aucune erreur de construction.

+1

C'est le problème le plus probable des droits. Les utilisateurs n'ont pas le droit d'écrire dans les fichiers programme. Vous auriez besoin d'être élevé pour faire cela (et ce n'est probablement pas une bonne idée ici). La définition de paramètres spécifiques à l'utilisateur n'est-elle pas suffisante pour vous? – svick

+0

Eh bien, je suis en train d'essayer de lire à partir de l'app.config. Le groupe Utilisateurs dispose des droits en lecture sur le dossier. Je ne pense pas que ce soit une question de droits dans ce cas. Cela fonctionne correctement dans un autre module en lisant un app.config différent dans le même dossier. –

Répondre

0

Essayez avec

System.Configuration.ConfigurationSettings.AppSettings["MsgAlertWav"]; 

ou consultez les

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 
0

System.Configuration.ConfigurationSettings est dépréciée et est conçu pour des solutions sur les versions cadres 1.0 et 1.1.

Étant donné que vous utilisez une version 3.0, vous devez utiliser System.Configuration.ConfigurationManager. Est assez mcuh la même chose, a le même usage

System.Configuration.ConfigurationManager["MsgAlertWav"]; 

HTH, -covo

Questions connexes