2012-06-28 10 views
7
  • He creado un Installhelper.cs que está insertado desde el instalador.
  • Reemplace el método Install() utilizando este fragmento de código (A).

Estos valores que se insertan en el app.config no están disponibles en el archivo [Proyecto] exe.config que se crea después de la instalación. Ya he agregado una sección como se muestra a continuación en la app.config manualmente (B)Cómo escribir en app.config en el proyecto de instalación y usarlo en el programa

los datos se pasan a la clase de instalador pero los datos no se escriben en los campos de app.config. Permanecen iguales en el archivo de configuración creado durante la instalación.

Cualquier ayuda es muy apreciada. He pasado casi un día en esto.

Código 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; 
     } 
    } 
} 

sección Agregado en la configuración de aplicaciones es Código B:

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

Respuesta

1

Gracias. Tuvimos este problema exacto y no pudimos entender por qué no escribiría en el archivo. la única cosa diferente que hice fue obtener la ruta desde la aplicación.

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

Gracias kleopatra por la edición. :) – Jasmeet

6

El problema de esta codificación fue esta línea

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

No hace indique la ruta en la que se basa el archivo de configuración durante la instalación. Por lo tanto, tiene que cambiarse a

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

    Configuration config = ConfigurationManager.OpenExeConfiguration(path); 

Ahora funciona. :)

Cuestiones relacionadas