Установщик WiX msi не устанавливает приложение Winform, созданное в Visual Studio 2017
Для простого теста я создал Wix
Установщик приложения для простого приложения Winform выглядит следующим образом. Но когда я бегу msi
созданный с помощью установщика, он работает всего одну секунду и завершает работу без установки приложения Winform. Вопрос: в чем может быть проблема здесь? Кажется, что-то не хватает в моем Product.wxs
файл. Примечание: я использую VS2017
Шаги, чтобы произвести проблему
- Установлены
Wix Toolset Visual Studio 2017 Extension
отсюда и следовал их инструкциям по установкеWiX 3.11 RC2
отсюда - Создано по умолчанию
Winform project
[только одна единственная форма, к которой ничего не добавлено] - Создано
Wix Setup project
используяToolset\v3\Setup Project
шаблон в том же решении - В проекте WiX Setup добавлена ссылка на проект Winform
- Построил все решение.
- Щелкните правой кнопкой мыши проект установки и пересоберите его, который создал
.msi
файл в его\..bin\Debug
папка - Дважды щелкнул
.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 по умолчанию. Вы можете увидеть, как эти изменения "слились" в полный образец в последнем разделе ответа, но прочитайте этот шаг за шагом, чтобы это имело смысл.
Создайте новый проект WiX3. Вы знаете, как это сделать, я не буду тратить время на детали.
Установить
Manufacturer
приписать название вашей компании. Теперь установите новое имя по вашему выборуName
приписывать. В этом примере это установлено наMinimalTester
- используйте что-нибудь еще, пожалуйста.+ Изменить
<MediaTemplate />
в<MediaTemplate EmbedCab="yes" />
использовать встроенные CAB-файлы в MSI. Таким образом, создается только MSI, и нет никакого дополнительного внешнего CAB-файла.Сразу после элемента MediaTemplate добавьте следующее:
<UIRef Id="WixUI_Mondo" />
, Это добавит диалоговое окно WiX по умолчанию к вашему MSI, так что в нем есть основы того, что необходимо для более общего использования. Теперь вы можете запустить восстановление и модификацию, и вы получите мастер для первоначальной установки в соответствии с тем, что большинство файлов MSI предоставляют из Installshield или Advanced Installer или других профессиональных инструментов. И самое важное: ваша административная установка будет иметь диалог, в котором вы сможете указать, куда следует извлекать файлы.Мы добавим наше собственное лицензионное соглашение к настройке WiX (иначе вы получите невнятное соглашение по умолчанию). Сразу после
<UIRef Id="WixUI_Mondo" />
добавить этот элемент:<WixVariable Id="WixUILicenseRtf" Value="TestLicenseAgreement.rtf" />
, Теперь создайте файлTestLicenseAgreement.rtf
и поместите его в ту же папку, что и ваш основной исходный файл WiX (быстрый способ: в Visual Studio щелкните правой кнопкой мыши проект и "Открыть папку в проводнике", теперь создайте RTF-файл, щелкнув правой кнопкой мыши => New => RTF-файл. И возможно, откройте RTF и введите текст теста). Дальнейшая настройка диалогов (растровые изображения и многое другое).Набор диалогов WiX определен в DLL, мы должны ссылаться на него. В вашем проекте Visual Studio WiX:
Right click References => Add Reference... => Navigate to C:\Program Files (x86)\WiX Toolset v3.11\bin\
, Двойной щелчокWixUIExtension.dll
и, наконец, нажмитеOK
,Теперь добавьте абсолютный минимальный компонент, возможный в WiX с абсолютным путем, указанным в качестве источника. Это чтобы убедиться, что вы можете скомпилировать MSI. После этого вы можете сделать путь относительным или переменной (просто добавьте это прямо под
INSTALLFOLDER
элемент каталога на данный момент):
<Component Feature="ProductFeature">
<File Source="C:\Users\someone\SourceControl\MyProject\CoreApp.exe" />
</Component>
- Наконец, щелкните правой кнопкой мыши проект 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. Как видно из видео, это всего лишь несколько минут работы.