2012-06-28 13 views
7
  • Ho creato un Installhelper.cs che è ereditato dal programma di installazione.
  • Sostituire il metodo Install() utilizzando questo pezzo di codice (A).

Questi valori che vengono inseriti al app.config non sono disponibili nel [projectName] exe.config file di che viene creato dopo l'installazione. Ho già aggiunto una sezione come mostrato nell'app.config manualmente (B)Come scrivere in app.config nel progetto di installazione e usarlo nel programma

i dati vengono passati alla classe di installazione ma i dati non vengono scritti nei campi app.config. Rimangono uguali nel file di configurazione creato durante l'installazione.

Qualsiasi aiuto è molto apprezzato. Ho passato quasi un giorno a questo.

Codice A:

[RunInstaller(true)] 
public partial class Installation : System.Configuration.Install.Installer 
{ 
    public Installation() 
    { 
     InitializeComponent(); 
    } 

    public override void Install(IDictionary stateSaver) 
    { 
     //base.Install(stateSaver); 

     try 
     { 
      // In order to get the value from the textBox named 'EDITA1' I needed to add the line: 
      // '/PathValue = [EDITA1]' to the CustomActionData property of the CustomAction We added. 

      string userName = Context.Parameters["userName"]; 
      string password = Context.Parameters["password"]; 
      string folderPath = Context.Parameters["path"]; 

      MessageBox.Show(userName); 
      MessageBox.Show(password); 
      MessageBox.Show(folderPath); 

      Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
      //config.AppSettings.Settings.Add("userName", userName); 
      //config.AppSettings.Settings.Add("password", password); 
      //config.AppSettings.Settings.Add("foderPath", folderPath); 





      config.AppSettings.Settings["userName"].Value = userName; 
      config.AppSettings.Settings["password"].Value = password; 
      config.AppSettings.Settings["foderPath"].Value = folderPath; 
      config.Save(ConfigurationSaveMode.Full); 
      ConfigurationManager.RefreshSection("appSettings"); 




     } 
     catch (FormatException e) 
     { 
      string s = e.Message; 
      throw e; 
     } 
    } 
} 

Aggiunta la sezione nella configurazione applicazione è Codice B:

<appSettings> 
<add key="userName" value="" /> 
<add key="password" value="" /> 
<add key="foderPath" value="" /> 
</appSettings> 

risposta

1

Grazie. Abbiamo avuto questo problema esatto e non siamo riusciti a capire perché non avrebbe scritto sul file. l'unica cosa diversa che ho fatto è stata ottenere il percorso dall'applicazione.

string path = Application.ExecutablePath; 
Configuration config = ConfigurationManager.OpenExeConfiguration(path); 
+2

Grazie kleopatra per la modifica. :) – Jasmeet

6

Il problema di questa codifica è stata questa linea

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

Non fa fornire il percorso in cui si trova il file di configurazione durante l'installazione. Quindi deve essere modificato in

string path = Path.Combine(new DirectoryInfo(Context.Parameters["assemblypath"].ToString()).Parent.FullName, "[project name].exe") 

    Configuration config = ConfigurationManager.OpenExeConfiguration(path); 

Ora funziona. :)

Problemi correlati