2010-03-08 32 views
1

Je vois un comportement étrange lorsque je tente de lancer une application en utilisant un nom d'application stocké dans Properties.Settings. Si je ne redéfinis pas la valeur (même valeur) avant de l'utiliser, l'application lancée ne parviendra pas à obtenir l'emplacement correct pour ses paramètres d'application. Peut-être que montrer le code éclaircira ce que je dis.StartProcess utilisant la valeur de Properties.Settings provoque des résultats inhabituels

Voici le code qui lance le nouveau processus. Des trucs assez simples.

private void StartNewApplication() 
    { 
     Process mainAppProcess = new Process(); 
     ProcessStartInfo startInfo = new ProcessStartInfo(); 
     startInfo.FileName = Properties.Settings.Default.TheApplicationPath; 
     startInfo.WindowStyle = ProcessWindowStyle.Normal; 

     mainAppProcess.StartInfo = startInfo; 
     mainAppProcess.Start(); 
     mainAppProcess.WaitForExit(); 
    } 

J'ai une autre fonction qui définit simplement le réglage en naviguant sur le fichier dans un OpenFileDialog standard. Je ne vais pas montrer qu'ici, à l'exception de l'extrait:

 if (fileDialog.ShowDialog().Value == true) 
     { 
      Properties.Settings.Default.TheApplicationPath = fileDialog.FileName; 
      Properties.Settings.Default.Save(); 
     } 

Le code qui périclite (que je ne contrôle pas) est quelque chose comme:

private static string GetConfigFolder() 
    { 
     string configFolder = ConfigurationManager.AppSettings.Get("ConfigFolder"); 
     configFolder = Path.GetFullPath(configFolder);   
     return string.IsNullOrEmpty(configFolder) ? Environment.CurrentDirectory : configFolder; 
    } 

Puisque la valeur AppSettings est L'appel Path.GetFullPath retourne toujours le répertoire en cours. Si je ne redéfinis pas la valeur Properties.Setting, c'est le chemin du programme qui démarre l'application; Si je redéfinis le paramètre, c'est le chemin de l'application qui a été lancé.

Des idées?

Merci, WTS

Répondre

1

Les paramètres sont enregistrés dans le cadre d'une installation. Si vous déboguez ou exécutez cette opération à partir de Visual Studio, la valeur par défaut sera utilisée à chaque fois, et lorsque vous enregistrez le paramètre, il ne restera que pendant la durée de votre session de débogage.

En d'autres termes, regardez ce paramètre dans votre fichier app.config. Déboguer et changer la valeur. Regardez à nouveau le fichier app.config. Il n'est pas mis à jour. Par contre, si vous déployez cette application, app.config sera mise à jour (notez toutefois que si vous le redéployez ou le réinstallez, les paramètres enregistrés seront de nouveau remplacés, par défaut).

+0

Compris. Cependant, le problème ici est que le réglage par défaut est exactement le même que le réglage "mis à jour". Je recherche et sélectionne le même chemin que celui enregistré dans les paramètres par défaut. –

+0

J'ai eu quelque chose de similaire, mais je ne me souviens pas des détails. Regardez le fichier généré pour les paramètres de l'application et assurez-vous qu'il n'y a pas de valeurs par défaut inattendues dans les attributs. Mon problème avait quelque chose à voir avec le concepteur de paramètres et le codebehind étant désynchronisé. – Jay

+0

Je suis allé jusqu'à l'exécuter avant et après avoir redéfini la valeur, et faire un String.Compare dans la fenêtre Watch, avec un résultat de 0. –