Как включить предварительные требования с msi/Setup.exe в WIX

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

Я создал загрузчик Microsoft, который содержит файл Setup.exe с выходными данными MSI проекта, а также предварительные требования.NET Framework 2.0, установщик Windows 3.1, распространяемые файлы Visual C++ 2005 и Microsoft ReportViewer. Я создал проект установки с использованием Visual Studio 2008.

Сейчас я пытаюсь создать одну сжатую настройку, используя WiX 3.6. Я установил его в Visual Studio 2008.

Я приложил файл setup.exe и MSI, используя следующие команды.

<ExePackage SourceFile ="setup.exe" Compressed ="yes"/>
<MsiPackage SourceFile ="myproject.msi" Compressed ="yes" />

Но он не может найти файл MSI. Как я могу включить вышеуказанные предпосылки с ним?

Или я могу загрузить вышеуказанные предварительные условия из Интернета при установке? Как мне это сделать?

4 ответа

Решение

Я удалил по умолчанию setup.exe из Visual Studio и использовал файл MSI и зависимости от Visual Studio для создания загрузчика WiX 3.6:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">

    <Bundle Name="My Application"
            Version="1.0"
            IconSourceFile ="E:\logo.ico"
            Manufacturer="My company"
            UpgradeCode="4dcab09d-baba-4837-a913-1206e4c2e743">

        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
            <bal:WixStandardBootstrapperApplication
                LicenseFile="E:\License.rtf"
                SuppressOptionsUI ="yes"
                LogoFile ="logo.ico" />
        </BootstrapperApplicationRef>

        <Chain>
            <ExePackage
                SourceFile ="ReportViewer\ReportViewer.exe"
                Compressed ="yes"
                Vital ="no"
                Permanent ="yes"/>
            <ExePackage
                SourceFile ="vcredist_x86\vcredist_x86.exe"
                Compressed ="yes"
                Vital ="no"
                Permanent ="yes"/>
            <MsiPackage
                SourceFile ="MySetup.msi"
                Compressed ="yes"
                DisplayName ="My Application"
                ForcePerMachine ="yes"/>
        </Chain>
    </Bundle>
</Wix>

Он сжимается в один EXE-файл с необходимыми условиями.

SourceFile примет относительный путь файла.msi. Или, если вы создаете MSI-файл с помощью проекта установки WiX, вы можете добавить ссылку на проект установки в проекте WiX Bootstrapper. Это определяет переменные, которые вы можете использовать следующим образом:

<MsiPackage SourceFile ="$(var.myproject.TargetPath)" Compressed ="yes" />

Ваши пользователи, вероятно, получат лучший опыт, если вы удалите загрузчик Visual Studio и поместите все необходимые компоненты в загрузчик WiX. Это будет немного больше работы для вас, потому что нет заранее определенного ExePackageGroup или же ExePackage для всех предпосылок вашего проекта.

Лучшее место для проверки информации о том, что должно идти в ExePackage определение - это документация для конкретной предпосылки, о которой идет речь. Но также полезно сравнивать с пакетами загрузчика Visual Studio (например, в C:\Program Files\Microsoft Visual Studio 9\SDK\v2.0\Bootstrapper\Packages) и аналогичные предварительные условия, которые могут быть предварительно определены в исходном коде WiX. В частности, в исходном коде WiX вы найдете ExePackage который загружает.NET 4 из Интернета, если это необходимо при установке.

Вы можете включить какой-нибудь предварительный файл с чем-то вроде:

 <?xml version="1.0" encoding="UTF-8"?>
 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
 <Product Id="*" Name="MyApplication" Version="$(var.ProductVersion)" Manufacturer="manuf" Language="1033">

 [...]

 <Directory Id="ANOTHERLOCATION" Name="MyApplicationName">
    <Component Id="ApplicationFiles" Guid="12345678-1234-1234-1235-111111111111">
         <File Id="ApplicationFile4" Source="C:\Users\user\Desktop\requisite.exe"/>
         <CreateFolder />
    </Component>
 </Directory>
 <SetDirectory Id="ANOTHERLOCATION" Value="[WindowsVolume]MyApp" />
         <Feature Id="DefaultFeature" Level="1">
        <ComponentRef Id="ApplicationFiles" />
 </Feature>
 </Product>
 </Wix>

Выше копирует файл требуемого файла в C:/MyApp. Затем вы должны запустить файл Requisite.exe из вашей программы на основе некоторых условий. Это самый простой и простой способ без использования сложного волшебства Wix.

Вы можете использовать что-то вроде NSIS, чтобы завершить загрузчик и MSI. Вам нужно написать простой скрипт NSIS, например так:

!define PRODUCT_NAME "YourProductNameHere"

Name "${PRODUCT_NAME}"
OutFile "SetupWrapper.exe"
Icon "Setup.ico"
BrandingText " "
SilentInstall silent

Section

  SetOutPath "$TEMP\${PRODUCT_NAME}"

  ; Add all files that your installer needs here
  File "setup.exe"
  File "product.msi"

  ExecWait "$TEMP\${PRODUCT_NAME}\setup.exe"
  RMDir /r /REBOOTOK "$TEMP\${PRODUCT_NAME}"

SectionEnd

Сохраните это в файл с именем SetupWrapper.nsi и отредактируйте имя продукта и пути к setup.exe и вашему MSI-файлу. Теперь вы можете создать этот файл, чтобы получить один EXE-файл, который содержит загрузчик и MSI.

Когда этот EXE-файл запущен, у него не будет собственного пользовательского интерфейса - он просто извлечет ваш загрузчик и MSI во временную папку, затем запустит загрузчик и впоследствии очистит.

Вы также можете добавить шаг пост-сборки в свой проект, чтобы создать эту оболочку, которая автоматически сгенерирует объединенную оболочку EXE. Для этого вы можете добавить такую ​​команду:

path-to-NSIS\nsis-2.46\makensis.exe /V2 your-project-path\SetupWrapper.nsi
Другие вопросы по тегам