Настройка App.Config как пользовательское действие в проекте установки

У меня есть настраиваемое приложение с простым app.config с указанием имени и базы данных SQL Server, я хочу предложить пользователю установить приложение для элементов конфигурации приложения, а затем обновить файл app.config.

Я признаю, что я совершенно не новичок в настройке проектов, и я ищу некоторые рекомендации. Спасибо Марк Купс

Ответы

Ответ 3

App.Config МОЖЕТ быть изменен... однако он существует в местоположении, близком к HKEY___LOCAL_MACHINE, то есть средний пользователь имеет доступ только для чтения.

Итак, вам нужно будет изменить его как администратора - лучшее время будет при установке, где вы (предположительно) должны быть установлены с расширенными разрешениями.

Итак, создайте класс Installer, используйте пользовательское действие в проекте установки для передачи в пользовательских вариантах (например, "/svr = [SERVER]/db = [DB]/uilevel = [UILEVEL]" ), а в AfterInstall, измените файл App.Config, используя что-то вроде:

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