Преобразование настраиваемого действия проекта установки VS в настраиваемое действие проекта InstallShield - PullRequest
2 голосов
/ 21 октября 2011

У меня есть стандартный проект установки Visual Studio, который я преобразовываю в проект InstallShield LE.

У меня есть следующие пользовательские действия в CustomActions-Install-PrimaryOutputFromMyProject (Active) - CustomActionData - / sectionName = "userSettings / SSE.My.MySettings" / provName = "DPAPIProtection"

Как воссоздать это настраиваемое действие в InstallShield?

Вот код в моем классе установщика, все, что он делает, это защищает некоторые разделы файла app.config:

Imports System.ComponentModel
Imports System.Configuration.Install
Imports System.Configuration

'// This file encrypts the app.config file
Public Class CustomInstaller
    Inherits Installer
    Public Sub New()
        MyBase.New()

        'This call is required by the Component Designer.
        InitializeComponent()

        'Add initialization code after the call to InitializeComponent

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

        'get Configuration section 
        'name from custom action parameter
        Dim sectionName As String = Me.Context.Parameters("sectionName")

        'get Protected Configuration Provider 
        'name from custom action parameter
        Dim provName As String = Me.Context.Parameters("provName")

        ' get the exe path from the default context parameters
        Dim exeFilePath As String = Me.Context.Parameters("assemblypath")

        'encrypt the configuration section
        ProtectSection(sectionName, provName, exeFilePath)
    End Sub
    Private Sub ProtectSection(ByVal sectionName As String, ByVal provName As String, ByVal exeFilePath As String)
        Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(exeFilePath)
        Dim section As ConfigurationSection = config.GetSection(sectionName)

        If Not section.SectionInformation.IsProtected Then
            'Protecting the specified section with the specified provider
            section.SectionInformation.ProtectSection(provName)
        End If
        section.SectionInformation.ForceSave = True
        config.Save(ConfigurationSaveMode.Modified)
    End Sub

End Class

Ответы [ 2 ]

3 голосов
/ 21 октября 2011

Вы должны прочитать мою серию дополнений:

Дополнение InstallShield с использованием XML установщика Windows - сертификаты

Увеличение InstallShield с использованием XML установщика Windows - Службы Windows

По сути, я бы сделал это следующим образом:

1) Рефакторинг кода в вашем настраиваемом действии InstallerClass (InstallUtil) в настраиваемое действие WiX DTF.Этот шаг технически необязателен, но если вы знаете все ужасные вещи, связанные с InstallUtil, вы бы сделали это.

2) Создайте модуль слияния WiX, чтобы использовать DLL в качестве настраиваемого действия и упорядочить ее в таблице ModuleExecuteSequence.

3) Добавьте модуль слияния в проект InstallShield LE.

Примечание. InstallShield 2010LE в основном является упрощенным набором функций.Вы можете использовать его по цене обновления $ 1500 до версии InstallShield Professional.Если вы можете оправдать это, я бы сделал это.Реальность такова, что LE обладает некоторыми возможностями, и я могу придумать несколько творческих способов его расширения, но это гораздо проще сделать в обычном InstallShield.

1 голос
/ 21 октября 2011

InstallShield не поддерживает настраиваемые действия при выводе проекта. Это связано с тем, что установщик Windows использует пользовательские действия EXE и DLL в качестве определенных файлов, а не в качестве динамических выходных данных.

Кроме того, InstallShield LE не поддерживает пользовательские действия DLL. Таким образом, вы можете использовать только EXE, VBScript или JScript.

Поскольку вы использовали CustomActionData, я предполагаю, что ваш проект представляет собой DLL. Вы не можете создать пользовательское действие DLL в InstallShield LE.

...