Создать настраиваемое действие для запуска приложения и выхода из установщика - PullRequest
4 голосов
/ 03 июля 2010

Благодаря StackOverflow я вчера узнал, как добавить настраиваемое действие в установщик Visual Studio, чтобы запустить мою программу после обновления. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что в конце программы установки программа действительно открывается, но программа установки не завершает работу, пока я не выйду из приложения.

Есть ли способ обеспечить запуск приложения только после того, как пользователь нажмет кнопку «Готово» в пакете MSI? Или программа запускается при завершении программы установки, но программа установки завершается и завершает работу?

Я использую Visual Studio 2010, если это имеет значение.

Ответы [ 2 ]

12 голосов
/ 04 июля 2010

После некоторого поиска в Google я обнаружил, что настраиваемое действие для установщика Visual Studio, возможно, должно указывать на класс установщика.Итак, я создал новый проект типа класса в моем решении.Я удалил файл class1.cs и добавил класс установщика в новый проект со следующим кодом (помните: необходимо использовать security.permissions в какой-то момент):

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
using System.Diagnostics;
using System.Security.Permissions;


namespace AppName
{
    [RunInstaller(true)]
    public partial class InstallerClass : System.Configuration.Install.Installer
    {
        public InstallerClass()
        {
            InitializeComponent();
        }

        public override void Commit(System.Collections.IDictionary savedState)
        {
            base.Commit(savedState);
            System.Diagnostics.Process.Start(Context.Parameters["TARGETDIR"].ToString() + "application.exe");
            // Very important! Removes all those nasty temp files.
            base.Dispose();
        }
    }
}

После добавления InstallerClass,Я щелкнул правой кнопкой мыши по проекту установщика, выбрал «Добавить»> «Вывод проекта» и добавил класс установщика.Затем я щелкнул правой кнопкой мыши на установленном проекте и сделал View> Custom Action.Я добавил класс установщика в обе папки Install и Commit (если вы добавите его только в Commit, вы получите ошибку 1001: не удалось найти файл InstallState. Из-за переопределения commit он будет работать только при фиксации.создан на этапе 2, поэтому, если его нет в обоих, он потерпит неудачу).

Необходимо добавить запись CustomActionData.Для этого выберите «Первичный вывод из InstallerClass» и перейдите на вкладку «Свойства».Вставьте следующее в CustomActionData:

/TARGETDIR="[TARGETDIR]\"

После того, как это было добавлено, приложение запускается правильно, когда установка завершается, и вы можете закрыть установщик, не дожидаясь выхода из приложения!

Только чтоМне было нужно.Спасибо Google за сохранение моего бекона.

Единственная проблема, которую я заметил, была то, что установщик теперь создает несколько файлов .tmp и файл .InstallState в моем ApplicationFolder.Мне интересно, есть ли что-то дополнительно, что нужно добавить в класс установщика, чтобы избавиться от этих бесполезных файлов?

Разобрался, как избавиться от временных файлов.Обновлен код с помощью Dispose ().

4 голосов
/ 24 августа 2011

Я следовал инструкциям здесь: http://msdn.microsoft.com/en-us/library/d9k65z2d.aspx

.. И получил ошибку «Ошибка 1001: не удалось найти файл InstallState».

Прочитав ответ ТаКидда выше, я понял, что мне придется: Добавьте класс установщика в папки Install и Commit.

Действительно важно. Просто оставив это здесь для будущих посетителей (я бы добавил комментарий, если бы ТАК позволил мне ...)

...