Проект установки Visual Studio 2008 - пользовательские действия не запускаются - PullRequest
4 голосов
/ 26 ноября 2008

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

Я хотел бы запустить настраиваемое действие в моей установке приложения (проект установщика Visual Studio), которая запускает исполняемый файл. Исполняемый файл просто выполняет некоторые задачи по копированию файлов system.io, и я подтвердил, что исполняемый файл при запуске сам по себе работает отлично.

  1. Я создал проект установщика
  2. добавил exe в папку приложения
  3. перешел к пользовательским действиям и добавил exe к шагу фиксации
  4. InstallerClass имеет значение true
  5. Запустил установщик, но не получил желаемого результата. Поэтому я добавил строку для записи в журнал Windows. Посмотрел в журнале Windows после повторного запуска установщика, и он выглядел так, как будто не запускался. Добавил debug.break в исполняемый код Unisntalled / переустановил мой установщик, и ничего не произошло. Я наконец сидел и наблюдал за процессами и подтвердил, что exe никогда не будет выполнен.

Есть мысли?

Целевые системы: Windows XP, Vista Visual Studio Версия: 2008 Sp1 Язык: VB.NET Целевые рамки: 2.0


Отлично. Я думаю, что я становлюсь ближе благодаря коду, который вы разместили. Я преобразовал его в VB, и я получаю эту ошибку: Не удается найти myexename.savedstate. Я предполагаю, что должен передать что-то подписчикам, которых вы разместили, но я не знаю что. (кстати, это консольное приложение) Я добавил ссылку на System.Configuration.Install.dll и вот мой код:


Imports System.ComponentModel
Imports System.Configuration.Install

 _
    Public Class ApplicationInstaller
        Inherits Installer
        Public Overloads Overrides Sub Commit(ByVal savedState As IDictionary)
            ' Do some work on commit
            The_Sub_I_Want_To_Run()
        End Sub
        Public Overloads Overrides Sub Install(ByVal stateSaver As IDictionary)
            ' Do some work on install
        End Sub
        Public Overloads Overrides Sub Uninstall(ByVal savedState As IDictionary)
            ' Do some work on uninstall
        End Sub
    End Class

Я не назвал это. Я никогда не использовал класс Installer раньше. Я мог бы сделать что-то очень новобранец здесь. Согласно вашим инструкциям, я добавил код, который вставил ниже в исполняемый файл, который я хочу запустить во время установки. Я добавил exe-файл в папку приложения, а затем добавил его в пользовательское действие Commit. Теперь вот код, который я сейчас имею в исходном коде моего exe-файла, который я пытаюсь запустить:

</p> <pre> _ Public Class ApplicationInstaller Inherits Installer Public Overloads Overrides Sub Commit(ByVal savedState As IDictionary) ' Do some work on commit The_Sub_I_Have_my_codein() MyBase.Commit(savedState) End Sub Public Overloads Overrides Sub Install(ByVal stateSaver As IDictionary) ' Do some work on install End Sub Public Overloads Overrides Sub Uninstall(ByVal savedState As IDictionary) ' Do some work on uninstall End Sub End Class


Хммм ... В свойствах проекта exe я нажал "Подписать сборку", и ошибка исчезла. Тем не менее, похоже, что исполняемый файл не запускает код, который я хочу.

Ответы [ 3 ]

8 голосов
/ 26 ноября 2008

exe или библиотека, которую вы добавляете на шаг Commit, должен содержать класс, производный от Installer и отмеченный атрибутом RunInstaller следующим образом:

[RunInstaller(true)]
public class ApplicationInstaller : Installer
{
    public override void Commit(IDictionary savedState) {
      // Do some work on commit
    }
    public override void Install(IDictionary stateSaver) {
      // Do some work on install
    }
    public override void Uninstall(IDictionary savedState) {
      // Do some work on uninstall
    }
}

Надеюсь, это поможет.

2 голосов
/ 26 ноября 2008

Вы вызываете базовый метод?

public override void Commit(IDictionary savedState) {
    // Do some work on commit
    base.Commit(savedState);
}
0 голосов
/ 28 ноября 2008

Установить для свойства

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