Установщик WiX msi не устанавливает приложение Winform, созданное в Visual Studio 2017

Для простого теста я создал Wix Установщик приложения для простого приложения Winform выглядит следующим образом. Но когда я бегу msi созданный с помощью установщика, он работает всего одну секунду и завершает работу без установки приложения Winform. Вопрос: в чем может быть проблема здесь? Кажется, что-то не хватает в моем Product.wxs файл. Примечание: я использую VS2017

Шаги, чтобы произвести проблему

  1. Установлены Wix Toolset Visual Studio 2017 Extension отсюда и следовал их инструкциям по установке WiX 3.11 RC2 отсюда
  2. Создано по умолчанию Winform project [только одна единственная форма, к которой ничего не добавлено]
  3. Создано Wix Setup project используя Toolset\v3\Setup Project шаблон в том же решении
  4. В проекте WiX Setup добавлена ​​ссылка на проект Winform
  5. Построил все решение.
  6. Щелкните правой кнопкой мыши проект установки и пересоберите его, который создал .msi файл в его \..bin\Debug папка
  7. Дважды щелкнул .msi файл из шага 6. Файл работал в течение одной секунды, появилось диалоговое окно установки Windows 10 (как и при любой установке, спрашивающей вас, хотите ли вы установить эту программу). Я нажал Yes, Установщик снова запустился на одну секунду, затем вышел. Но приложение Winform не было установлено.

Файл Product.wxs по умолчанию [Я не добавил здесь ничего, кроме добавления значения в Manufacturer атрибут]

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="WiX_test_4_Winfrm" UpgradeCode="e69fe67b-5c28-4764-8196-a6613b840eff">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate />

        <Feature Id="ProductFeature" Title="SetupProject1" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="SetupProject1" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
            <!-- <Component Id="ProductComponent"> -->
                <!-- TODO: Insert files, registry keys, and other resources here. -->
            <!-- </Component> -->
        </ComponentGroup>
    </Fragment>
</Wix>

2 ответа

"Привет WiX" (прозрачный алюминий, пожалуйста)

Я думаю, что вам нужен "Hello World" от WiX от CodeProject. Сейчас это довольно старо, но все же хорошо показывает вам основы компиляции работающего MSI.

ОБНОВЛЕНИЕ: Ниже я добавил пошаговое описание того, как скомпилировать MSI из свежего проекта Visual Studio WiX 3.

Ниже приводится еще один ответ с некоторой контекстной информацией о том, что на самом деле представляет собой WiX: пакеты MSI против nuget: что лучше для непрерывной доставки?, Здесь вы также найдете ссылку на "Привет, мир", а также несколько других ссылок.

В итоге: проверьте первую ссылку, чтобы получить "привет мир" WiX. Затем обновите исходный код парой тестовых компонентов и перекомпилируйте. Вы должны овладеть Orca (SDK tool), чтобы иметь возможность просматривать скомпилированные файлы MSI. Поскольку у вас установлена ​​Visual Studio, попробуйте поискать Orca-x86_en-us.msi и установите его (это собственный Microsoft, официальный просмотрщик и редактор MSI). Затем найдите Orca в меню "Пуск". Технически Orca устанавливается как часть Windows SDK (не Visual Studio), но Windows SDK входит в комплект установки Visual Studio. Получив скомпилированный файл MSI, просто щелкните его правой кнопкой мыши и выберите Edit with Orca,

Некоторый опыт потребуется, прежде чем такой файл действительно будет иметь смысл. По сути, это примитивная база данных MS SQL, хранящаяся в файле структурированного хранилища COM (OLE). По сути, файловая система в файле с потоками для различного контента (например, файлы, таблицы данных и т. Д.). Просто думайте об этом как о базе данных с нормальной ссылочной целостностью и сосредоточьтесь на основных таблицах, таких как File а также Component вначале.


Минимальная WiX MSI-компиляция - пошаговая инструкция

Позвольте мне попробовать пошаговое описание того, что вы можете сделать в недавно созданном проекте WiX 3, чтобы он компилировался с графическим интерфейсом WiX по умолчанию. Вы можете увидеть, как эти изменения "слились" в полный образец в последнем разделе ответа, но прочитайте этот шаг за шагом, чтобы это имело смысл.

  1. Создайте новый проект WiX3. Вы знаете, как это сделать, я не буду тратить время на детали.

  2. Установить Manufacturer приписать название вашей компании. Теперь установите новое имя по вашему выбору Name приписывать. В этом примере это установлено на MinimalTester - используйте что-нибудь еще, пожалуйста.

  3. + Изменить <MediaTemplate /> в <MediaTemplate EmbedCab="yes" /> использовать встроенные CAB-файлы в MSI. Таким образом, создается только MSI, и нет никакого дополнительного внешнего CAB-файла.

  4. Сразу после элемента MediaTemplate добавьте следующее: <UIRef Id="WixUI_Mondo" />, Это добавит диалоговое окно WiX по умолчанию к вашему MSI, так что в нем есть основы того, что необходимо для более общего использования. Теперь вы можете запустить восстановление и модификацию, и вы получите мастер для первоначальной установки в соответствии с тем, что большинство файлов MSI предоставляют из Installshield или Advanced Installer или других профессиональных инструментов. И самое важное: ваша административная установка будет иметь диалог, в котором вы сможете указать, куда следует извлекать файлы.

  5. Мы добавим наше собственное лицензионное соглашение к настройке WiX (иначе вы получите невнятное соглашение по умолчанию). Сразу после <UIRef Id="WixUI_Mondo" /> добавить этот элемент: <WixVariable Id="WixUILicenseRtf" Value="TestLicenseAgreement.rtf" />, Теперь создайте файл TestLicenseAgreement.rtf и поместите его в ту же папку, что и ваш основной исходный файл WiX (быстрый способ: в Visual Studio щелкните правой кнопкой мыши проект и "Открыть папку в проводнике", теперь создайте RTF-файл, щелкнув правой кнопкой мыши => New => RTF-файл. И возможно, откройте RTF и введите текст теста). Дальнейшая настройка диалогов (растровые изображения и многое другое).

  6. Набор диалогов WiX определен в DLL, мы должны ссылаться на него. В вашем проекте Visual Studio WiX: Right click References => Add Reference... => Navigate to C:\Program Files (x86)\WiX Toolset v3.11\bin\, Двойной щелчок WixUIExtension.dll и, наконец, нажмите OK,

  7. Теперь добавьте абсолютный минимальный компонент, возможный в WiX с абсолютным путем, указанным в качестве источника. Это чтобы убедиться, что вы можете скомпилировать MSI. После этого вы можете сделать путь относительным или переменной (просто добавьте это прямо под INSTALLFOLDER элемент каталога на данный момент):

  <Component Feature="ProductFeature">
    <File Source="C:\Users\someone\SourceControl\MyProject\CoreApp.exe" />
  </Component>
  1. Наконец, щелкните правой кнопкой мыши проект WiX в вашем решении и выберите Build, И вы можете быстро протестировать запуск MSI, щелкнув правой кнопкой мыши проект WiX и выбрав Open Folder in File Explorer, Теперь дважды щелкните по bin а потом Debug (или Release, если вы переключились на релизную сборку - не уверены, какие "различия по умолчанию" существуют между двумя конфигурациями). Вы должны увидеть собственное лицензионное соглашение во втором диалоговом окне в последовательности диалогов.

Более поздние версии WiX имеют большие значения по умолчанию для атрибутов, которые почти всегда устанавливаются на "значения шаблона" или где два атрибута по существу являются избыточными. Просто оставьте их вне вашего источника и позвольте компилятору WiX добавить их со значениями по умолчанию. Гораздо меньше суеты.

Как пример: у вышеприведенного элемента отсутствует Component Id, Во время компиляции по умолчанию используется идентификатор элемента File, который он содержит. File element Id в свою очередь, также отсутствует и будет по умолчанию имя файла, указанное Source attribute (который является обязательным атрибутом).

Может быть, посмотрите на этот ответ для более подробного описания и конкретного примера внизу: Синтаксис для направляющих в WIX? Посмотрите, насколько простыми могут быть ваши исходные файлы WiX, если вы устраните все избыточность и дублирование определенных атрибутов? Меньше текста, меньше ошибок.


Пример минимального источника WiX - встроенные комментарии

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

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <!--CHANGE 0: Set Manufacturer attribute to something, you must also specify a full GUID for UpgradeCode -->
  <Product Id="*" Name="MinimalTester" Language="1033" Version="1.0.0.0" Manufacturer="My Company" UpgradeCode="PUT-GUID-HERE">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

    <!--Standard: <MediaTemplate />-->
    <!--CHANGE #1: Enable embedded cab files, so there is only one file generated, the MSI file -->
    <MediaTemplate EmbedCab="yes" /> 

    <!--CHANGE #2: Add the following elements to link one of the default WiX GUI sequences and show the specified license agreement. The RTF file must be created and placed next to your WiX source file -->
    <UIRef Id="WixUI_Mondo" /> 
    <WixVariable Id="WixUILicenseRtf" Value="TestLicenseAgreement.rtf" />        

    <!--CHANGE #3: Add WiX dll reference. In Visual Studio WiX project: Right click References => Add Reference... => Navigate to C:\Program Files (x86)\WiX Toolset v3.11\bin\. Double click WixUIExtension.dll. Click OK -->

    <Feature Id="ProductFeature" Title="MinimalTester" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
    </Feature>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="MinimalTester" />
      </Directory>
    </Directory>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">

      <!--CHANGE #4: Remove TODO elements, add the most basic component possible as illustrated below -->
      <Component>
        <File Source="C:\Users\someone\SourceControl\MyProject\CoreApp.exe" />
      </Component>

    </ComponentGroup>
  </Fragment>
</Wix>

Попробуйте скомпилировать и протестировать установку. Должен установить в C:\Program Files (x86)\MinimalTester на нормальной системе.

Может быть, посмотрите дальнейшие ссылки для учебных пособий по WiX здесь: Установщик WIX неправильно отображает пользовательский образ WixUI Dialog.

Попробуй это:

https://github.com/iswix-llc/iswix-tutorials

https://www.youtube.com/watch?v=nnV_OU6fk8c

Отказ от ответственности: я поддерживаю IsWiX, FOSS WiX-ускоритель, который предоставляет улучшенные шаблоны проектов (строительные леса) и графические дизайнеры, чтобы выполнять большую часть работы с WiX XML. Как видно из видео, это всего лишь несколько минут работы.

Другие вопросы по тегам