Настройка параметров приложения App.config во время установки MSI vb.net - PullRequest
0 голосов
/ 01 февраля 2012

Я пытаюсь создать MSI-установку для моей службы Windows.Причина создания msi заключается в том, что предполагаемые пользователи хотят иметь возможность быстро установить службу с минимальным вмешательством.

я могу получить службу для установки как msi, но у меня есть переменная внутримой код, который мне нужен пользователь, чтобы определить, когда MSI устанавливается.переменная, которую я запрашиваю у пользователя, - это путь к файлу, который они хотят, чтобы находились xml-файлы, создаваемые моей службой.

Я подумал, что могу настроить параметры приложения app.config так, чтобы он содержал путь к файлу, который представляют собой xml-файлы.должно быть написаноОднако я изо всех сил пытаюсь сделать это, и я не уверен, что это лучший способ сделать это?

У меня есть проект установки, который содержит мой исполняемый файл и текстовое поле, которое будет содержать одну переменную от пользователя,setup project

У меня есть класс установщика, который содержит мой установщик службы и установщик процесса.Здесь я пытаюсь понять, что мне нужно делать дальше.Installer class Нужно ли переопределить метод установки?Текущий код моего класса установщика был сгенерирован автоматически и выглядит следующим образом:

Imports System.Configuration.Install
Imports System.Configuration

<System.ComponentModel.RunInstaller(True)> Partial Class ProjectInstaller
Inherits System.Configuration.Install.Installer

'Installer overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    Try
        If disposing AndAlso components IsNot Nothing Then
            components.Dispose()
        End If
    Finally
        MyBase.Dispose(disposing)
    End Try
End Sub

'Required by the Component Designer
Private components As System.ComponentModel.IContainer

'NOTE: The following procedure is required by the Component Designer
'It can be modified using the Component Designer.  
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
    Me.ServiceProcessInstaller1 = New System.ServiceProcess.ServiceProcessInstaller()
    Me.ServiceInstaller1 = New System.ServiceProcess.ServiceInstaller()
    '
    'ServiceProcessInstaller1
    '
    Me.ServiceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem
    Me.ServiceProcessInstaller1.Password = Nothing
    Me.ServiceProcessInstaller1.Username = Nothing
    '
    'ServiceInstaller1
    '
    Me.ServiceInstaller1.ServiceName = "Spotter"
    Me.ServiceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic
    '
    'ProjectInstaller
    '
    Me.Installers.AddRange(New System.Configuration.Install.Installer() {Me.ServiceProcessInstaller1, Me.ServiceInstaller1})

End Sub

Friend WithEvents ServiceProcessInstaller1 As System.ServiceProcess.ServiceProcessInstaller
Friend WithEvents ServiceInstaller1 As System.ServiceProcess.ServiceInstaller

End Class

Я даже могу добавить значения CustomActionData.Строка определяет, что передается в объект контекста, который я использовал для сбора введенного пользователем значения.param1 - это имя моей переменной.custom actions

Я в значительной степени борюсь с кодом установщика ... я думаю?

1 Ответ

0 голосов
/ 01 февраля 2012

Один из вариантов, который следует рассмотреть, - это использование стороннего установщика, такого как Installshield, который имеет встроенную поддержку для изменения файлов конфигурации xml, таких как файлы конфигурации.

Однако, если вы хотите свернуть свой собственный, вам определенно необходимо переопределить метод Install. Все параметры, которые вы передаете в CustomData, будут доступны в словаре, который передается в качестве параметра этому методу.

Например:

Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)
    MyBase.Install(stateSaver)

    If Me.Context.Parameters.Count <> 0 Then

        For Each sKey As String In Context.Parameters.Keys
            Select Case sKey.ToUpper
                Case "PARAM1"
                    ' XML directory
                    Me.XMLDir = Context.Parameters(sKey)

            End Select
        Next
    End If
End Sub

В подобных случаях мы всегда записываем значение в реестр, чтобы пользователю не приходилось повторно вводить его, если он удаляет или переустанавливает.

Я не уверен в точной последовательности событий для изменения app.config, но вы можете записать в реестр, а затем изменить app.config при первом запуске службы.

Вероятно, вы также обнаружите, что вам нужно удалить настраиваемое действие из фазы фиксации, чтобы ваш установщик работал успешно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...