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

В прошлом мы использовали Advanced Installer для создания наших MSI-инсталляторов для конкретного проекта. Срок действия нашей годовой лицензии на Advanced Installer истек, поэтому, чтобы избежать затрат на продление, и поскольку я думаю, что то же самое можно сделать с помощью Visual Studio, я пытаюсь использовать проект установки Visual Studio 2010 для создания моего .msi * 1002. *.

По большей части, инсталлятор, который я создал с помощью Visual Studio, работает нормально. Тем не менее, одна вещь, которую нам нужно сделать установщику, это запустить пару .reg файлов, чтобы добавить большую коллекцию настроек в реестр (возможно, стоит отметить, что это старое программное обеспечение, которое только поддерживается и обновляется до тех пор, пока не будет полностью заменено в ближайшем будущем. Менять наш метод хранения настроек нецелесообразно). С помощью Advanced Installer мы смогли выполнить файл .cmd как пользовательское действие «Установить», которое запустит эти .reg файлы, которые также были включены в установку. Проекты установки VS имеют настраиваемые действия, но, похоже, здесь они должны быть либо .dll , либо .exe , поэтому я должен найти альтернативу использованию . bat или .cmd file.

Сначала я попытался добавить проект командной строки в свое решение, состоящее только из следующих строк в методе main ():

using (Process registryInput = Process.Start("regedit.exe", "/s Settings1.reg"))
{
    registryInput.WaitForExit();
}

using (Process registryInput= Process.Start("regedit.exe", "/s Settings2.reg"))
{
    registryInput.WaitForExit();
} 

Я добавил основной вывод этого проекта в папку «Install» редактора «Custom Actions». Попытка запустить установщик, но процесс командной строки никогда не запускался и параметры реестра не были установлены. Если я вручную запускал исполняемый файл командной строки из каталога приложения, в котором он был установлен, он добавлял записи реестра в соответствии с назначением - поэтому проблема не в коде, который я использую для вызова файлов .reg .

Я обратился к MSDN и изменил решение для моделирования после их Пошагового руководства по пользовательским действиям . Я создал проект библиотеки классов (и удалил свой проект командной строки) и добавил класс установщика. Вместо запуска браузера с использованием URL-адреса веб-сайта Microsoft в методе Commit (), как показано в их примере, я добавил приведенный выше код в метод Install (). Вот что я закончил:

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

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);

        using (Process registryInput = Process.Start("regedit.exe", "/s Settings1.reg"))
        {
            registryInput.WaitForExit();
        }

        using (Process registryInput = Process.Start("regedit.exe", "/s Settings2.reg"))
        {
            registryInput.WaitForExit();
        } 
    }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Commit(IDictionary savedState)
    {
        base.Commit(savedState);
    }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Rollback(IDictionary savedState)
    {
        base.Rollback(savedState);
    }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Uninstall(IDictionary savedState)
    {
        base.Uninstall(savedState);
    }
}

Я добавил основной вывод этого нового проекта библиотеки классов в папку «Install» редактора «Custom Actions». Тем не менее, когда я запускаю установщик, код, кажется, не выполняется, и мои параметры реестра не добавляются. Я пробовал этот установщик, и для него установлено "Установить для всех пользователей" и "Только для этого пользователя".

Будем весьма благодарны за любую помощь в работе этого пользовательского действия или в качестве альтернативного метода получения файла .reg для запуска при установке. Заранее спасибо.

Ответы [ 4 ]

5 голосов
/ 16 июня 2011

Я только что натолкнулся на эту же проблему: пользовательское действие не было обнаружено установщиком.Было принято решение запустить Visual Studio от имени администратора.

Несмотря на то, что я являюсь полным администратором на моей машине без каких-либо ограничений (AFAIK), установщик никогда не будет выбирать пользовательские действия.Как только я закрыл Visual Studio, а затем перезапустил с правами администратора (щелкните правой кнопкой мыши> запустите с правами администратора), пользовательские действия были немедленно выбраны установщиком.

1 голос
/ 20 декабря 2011

Я немного ударился головой о клавиатуру - и только после того, как мои пользовательские действия по установке в Конструкторе класса установщика заставили его работать.

Я следовал учебнику, который нашел здесь:http://msdn.microsoft.com/en-us/library/d9k65z2d(v=VS.100).aspx

0 голосов
/ 18 октября 2018

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

Я просто щелкнул правой кнопкой мыши по проекту установщика, а затем "Установить" и "Удалить".Тем не менее, вы должны перестроить проект установщика после изменения кода!(и, возможно, проект с классом установщика)

0 голосов
/ 08 октября 2012

Посмотрите, помогает ли эта ссылка, она мне помогла:

Установщик Visual Studio 2008, Custom Action.Точка останова не запускается

В основном, код после

base.Install (stateSaver);

не выполняется.Так что ставьте base.Install (stateSaver);как последняя строка в методе.

...