Пользовательское действие не работает - проект установки Visual Studio

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

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

Сначала я попытался добавить в свое решение проект командной строки, состоящий только из следующих строк в методе 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();
} 

Я добавил Первичный вывод этого проекта в папку «Установить» редактора «Настраиваемые действия». Пытался запустить установщик, но процесс командной строки никогда не запускался, и не были установлены параметры реестра. Если я вручную запускал исполняемый файл командной строки из каталога приложения, в котором он был установлен, он добавлял записи в реестр, как и предполагалось, поэтому проблема не в коде, который я использую для вызова файлов .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);
    }
}

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

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

7
задан Tim Coolman 1 June 2011 в 17:17
поделиться