В прошлом мы использовали 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 для запуска при установке. Заранее спасибо.