2008-10-30 5 views
14

J'ai une application personnalisée avec un app.config simple spécifiant le nom et la base de données SQL Server, je veux inviter l'utilisateur sur l'installation de l'application pour les éléments de configuration de l'application, puis mettre à jour l'application. fichier de configuration. Je reconnais que je suis totalement nouveau dans la configuration de projets et que je suis à la recherche de conseils. Merci Vous Mark KoopsSetup App.Config en tant qu'action personnalisée dans le projet d'installation

Répondre

2

App.Config PEUT être changé ... mais il existe dans un endroit proche de HKEY___LOCAL_MACHINE dire l'utilisateur moyen a accès en lecture seule.

Vous aurez donc besoin de le changer en tant qu'administrateur - le meilleur moment serait lors de l'installation, où vous êtes (supposé être) installer avec des autorisations améliorées. Pour créer une classe d'installateur, utilisez une action personnalisée dans le projet d'installation pour transmettre les choix de l'utilisateur (par exemple "/ svr = [SERVER]/db = [DB]/uilevel = [UILEVEL]") et, dans l'événement AfterInstall, modifiez le fichier App.Config en utilisant quelque chose comme:

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 
Questions connexes