Как преобразовать более 100 проектов установщика Visual Studio (vdproj) в установщики Wix?

У нас есть более 100 решений Visual Studio C # / .net, которые содержат проект установщика Visual Studio (vdproj) для развертывания. Они построены в Visual Studio 2010.

Чтобы выполнить обновление до Visual Studio 2012, нам необходимо перенести эти проекты .vdproj на Wix, поскольку vs2012 больше не поддерживает эти типы проектов.

Эти проекты в основном представляют собой простые проекты, которые устанавливают файлы в указанное место. Мы действительно используем специальное действие во время установки, чтобы указать местоположение файлов .config (заменяя теги фактическими значениями).

Как лучше всего (с наименьшими усилиями на проект) преобразовать эти проекты в Wix?


person oɔɯǝɹ    schedule 28.10.2012    source источник
comment
как насчет этого вопроса   -  person Rik van den Berg    schedule 29.10.2012
comment
@Rikkos: проблема с этим вопросом в том, что в принятом ответе используется инструмент dark. Этот инструмент выполняет обратное проектирование файла .msi, но это приводит к большой очистке. Для 100+ проектов это нежелательный вариант. Мне нужно напрямую конвертировать из .vdproj в .wxs.   -  person oɔɯǝɹ    schedule 30.10.2012
comment
Насколько мне известно, существует программа WixEdit (wixedit.sourceforge.net). Вы можете загрузить в него msi-файл, и программа сконвертирует его в Wix.   -  person Nerielle    schedule 31.10.2012
comment
Проверьте, помогает ли вам VDProj to WiX Converter. visualstudiogallery.msdn.microsoft.com/   -  person AKaral    schedule 17.06.2013
comment
@AKaral звучит многообещающе, спасибо за ссылку, я посмотрю на нее. Немного обидно, что демо-видео (буквально) говорит: «Здесь происходит волшебство», когда становится интересно ...   -  person oɔɯǝɹ    schedule 17.06.2013
comment
@AKaral; Я провел пробную версию этого инструмента (ссылку на сайте найти нелегко, пришлось отправить письмо в службу поддержки). Срок действия пробной версии истекает через 7 дней. Кажется, можно отлично конвертировать проекты .vdproj (включая настраиваемые действия). Создаваемые им проекты .WiX функциональны и надежны, но, на мой взгляд, они не обслуживаются. Может быть, я не знаком с WiX, но я нахожу XML нечитаемым. Срок действия пробной версии истек, но я не могу сказать, что хотел бы использовать этот инструмент для всех своих проектов.   -  person oɔɯǝɹ    schedule 05.07.2013


Ответы (4)


Я опубликую здесь свою реакцию. Из-за лучшего форматирования и некоторых вещей, которые я люблю объяснять.

В вашем ответе на ваш комментарий. Ответ также содержит сценарий, созданный с помощью PowerShell. Что вы могли бы сделать, так это создать еще одну оболочку PowerShell, которая будет перебирать ваши проекты, а затем выполнять скрипт. Но тогда у вас будут только wxs-файлы, вам все равно нужно создать более 100 проектов wix и добавить файлы в этот проект.

Что вы также можете сделать, так это создать события после сборки в проектах, которые вы хотите установить, с помощью heat.exe. например (может потребоваться некоторая настройка / изменение для вашего проекта)

call "C:\Program Files (x86)\WiX Toolset v3.6\bin\heat.exe" project "$(ProjectDir)$(ProjectFileName)" -directoryid INSTALLDIR -pog Content -gg -scom -sreg -sfrag -out "$(SolutionDir)Installed\$(ProjectName).Content.wxs"

Затем вы можете связать выходной файл с проектом WiX, чтобы каждый раз, когда вы добавляете файлы или dll, он автоматически генерируется снова, и ваши файлы остаются синхронизированными. Все, что вам сейчас нужно, это создать какой-то шаблон product.wxs, который можно будет использовать во всех своих проектах wix.

Я думаю, что решением здесь было бы использовать комбинацию PowerShell и heat.exe. Вы можете использовать указанную выше команду для создания wxs-файла для ваших проектов. Но вам все равно придется вручную добавлять wix-проекты.

person Rik van den Berg    schedule 30.10.2012

Вы строго привязаны к Wix?

Возможно, вы могли бы переключиться на NSIS или Inno Setup, которые являются бесплатными (с открытым исходным кодом) системами.

Существует расширение Visual Studio для работы с NSIS / Inno Setup, которое может обрабатывать проекты VS Setup (.vdproj) и преобразовывать их - http://visualstudiogallery.msdn.microsoft.com/5e57fe9a-ae5d-4740-a1c3-7a8e278e105b.

person Slappy    schedule 11.06.2013

Предлагаю посмотреть на Wix #. http://www.codeproject.com/Articles/31407/Wix-WixSharp-managed-interface-for-WiX.

Для разработчиков C #, которым необходимо создать MSI-установщик Windows для развертывания своего приложения, Wix #, пожалуй, лучшая замена для типа проекта «Упаковка и развертывание», который Microsoft удалил из Visual Studio, начиная с VS2012. Wix - это интерфейс C # для набора инструментов WiX, который позволяет создавать полный MSI-файл установщика Windows на языке C #.

Вы специально упомянули, что все ваши установщики - это простые проекты, которые устанавливают файлы в заданное место с настраиваемым действием во время установки, чтобы указать местоположение файлов .config (заменяя теги фактическими значениями).

Wix # подходит для этого типа требований, если ваши проекты действительно очень похожи, как вы указываете. Вы должны разработать хороший пример Wix # на C # для одной типичной программы, а затем клонировать его 100 раз (или сколько угодно раз) для каждого дополнительного установщика .vdproj, который вы заменяете. Еще лучше, если у вас есть член команды, который хорошо разбирается в шаблонах T4, вы можете использовать это для автоматизации процесса превращения вашего первого установщика прототипа C # Wix # в шаблон, а затем использовать этот шаблон для автоматического создания оставшиеся 99 файлов .cs Wix # для остальных ваших проектов.

Ниже приведен пример кода C # для запрашиваемого вами типа установщика Wix #. Предполагается, что вы написали служебную программу с именем «TailorMyConfig.exe», например, простую программу C #, которая использует процедуры ConfigurationManager.AppSettings, и развертываете этот исполняемый файл вместе со своим приложением.

using System;
using System.Windows.Forms;
using System.Diagnostics;
using Microsoft.Deployment.WindowsInstaller;
using WixSharp;

class Script
{
    static public void Main(string[] args)
    {
        var project = new Project("MyProduct",
                          new Dir(@"%ProgramFiles%\My Company\My Product",
                              new File(@"Files\Bin\MyApp.exe"),
                              new File(@"Files\Bin\TailorMyConfig.exe")),
                          new ManagedAction("UpdateConfigFile"));

        project.Id = new Guid("6f330b47-2577-43ad-9095-1861ba25889b");

        Compiler.BuildMsi(project);
    }
}

public class MyCustomAction
{
    [CustomAction]
    public static ActionResult UpdateConfigFile(Session session)
    {
        if (DialogResult.Yes == MessageBox.Show("Config file update ready to run.\n Update config file(s) now?", 
                                                "Config Tailoring Utility",
                                                MessageBoxButtons.YesNo))
        {
            Process.Start("TailorMyConfig.exe", "Run utility to tailor config file to current system");
        }
        return ActionResult.Success;
    }
}

Обратите внимание, что есть «лучшие» способы изменить файл конфигурации с помощью функций WiX. Для простоты в приведенном выше примере предполагалась написанная на заказ утилита C # exe для изменения файлов конфигурации. Я бы предложил вместо этого использовать возможности WiX XML. Вы можете включить практически любые возможности WiX XML непосредственно в настройку Wix #, используя технику Wix # «XML-инъекция».

Помните, что Wix # - это просто интерфейс C #, который испускает синтаксис WiX XML. После того, как Wix # отправит WiX XML (файл wxs), этот файл wxs можно легко подвергнуть последующей обработке для вставки дополнительных функций WiX XML. Затем получившийся файл wxs компилируется набором инструментов WiX в MSI.

Пример использования XML-инъекции для включения функций WiX XML в установку Wix # (C #) см. Здесь Как в Wix # избежать создания физической папки в целевой системе при развертывании только записей реестра? В этом вопросе см. Мой ответ, в котором используется техника подключения делегата к событию "WixSourceGenerated".

Затем вы можете использовать этот подход XML-инъекции, чтобы вставить некоторый WiX XML в ваш установщик, который будет выполнять редактирование файла конфигурации. Пример типичного WiX XML для изменения файлов конфигурации находится здесь: Как изменить файлы конфигурации .NET во время установки?

Я понимаю, что это несколько более старый вопрос, но он возник в моих поисках, поэтому я хочу, чтобы эта дополнительная опция Wix # была известна другим поисковикам. Подход Wix # оказался очень полезным в моей среде, и он позволяет использовать знакомый набор навыков C # без необходимости погружаться в полную сложность технологии установщика WiX XML.

person Developer63    schedule 18.12.2014

Вы должны сначала получить книгу WiX (~ 500 страниц) и прочитать ее очень внимательно. Во-вторых, стоит немного поэкспериментировать. В-третьих, вы должны вручную конвертировать их в WiX.

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

person Erti-Chris Eelmaa    schedule 18.12.2014