2008-10-30 12 views
14

Tengo una aplicación personalizada con un simple app.config que especifica el nombre del servidor SQL y la base de datos. Deseo solicitarle al usuario que instale la aplicación para los elementos de configuración de la aplicación y luego actualice la aplicación. archivo de configuración.Configuración App.Config como acción personalizada en el proyecto de instalación

Admito que soy totalmente nuevo en la configuración de proyectos y estoy buscando orientación. Gracias Mark Koops

Respuesta

2

app.config PUEDE ser cambiado ... de sólo lectura sin embargo, existe en una ubicación similar a HKEY___LOCAL_MACHINE es decir, el usuario medio tiene acceso.

Así que tendrá que cambiarlo como administrador: el mejor momento sería durante la instalación, donde se supone que debe instalar con permisos mejorados.

Así que cree una clase de Instalador, use una Acción personalizada en el proyecto de instalación para pasar las elecciones del usuario (por ej. "/ Svr = [SERVIDOR]/db = [DB]/uilevel = [UILEVEL]") y, AfterInstall caso, cambie el archivo app.config usando algo como:

Public Shared Property AppConfigSetting(ByVal SettingName As String) As Object 
    Get 
     Return My.Settings.PropertyValues(SettingName) 
    End Get 
    Set(ByVal value As Object) 
     Dim AppConfigFilename As String = String.Concat(System.Reflection.Assembly.GetExecutingAssembly.Location, ".config") 

     If (My.Computer.FileSystem.FileExists(AppConfigFilename)) Then 
      Dim AppSettingXPath As String = String.Concat("/configuration/applicationSettings/", My.Application.Info.AssemblyName, ".My.MySettings/setting[@name='", SettingName, "']/value") 

      Dim AppConfigXML As New System.Xml.XmlDataDocument 
      With AppConfigXML 
       .Load(AppConfigFilename) 

       Dim DataNode As System.Xml.XmlNode = .SelectSingleNode(AppSettingXPath) 

       If (DataNode Is Nothing) Then 
        Throw New Xml.XmlException(String.Format("Application setting not found ({0})!", AppSettingXPath)) 

       Else 
        DataNode.InnerText = value.ToString 
       End If 

       .Save(AppConfigFilename) 
      End With 

     Else 
      Throw New IO.FileNotFoundException("App.Config file not found!", AppConfigFilename) 
     End If 

    End Set 
End Property 
Cuestiones relacionadas