Как включить необходимые компоненты с помощью 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. Как я могу включить в него перечисленные выше предварительные условия?

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


person Narayan    schedule 04.07.2013    source источник


Ответы (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-файл с необходимыми условиями.

person Narayan    schedule 16.08.2013

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

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

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

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

person Tom Blodget    schedule 05.07.2013

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

 <?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>

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

person dendini    schedule 04.07.2013
comment
если мне нужно проверить наличие предварительных условий, было ли оно установлено ранее или нет? Если нет, то установить, иначе пропустить установку .. Как проверить это условие? - person Narayan; 04.07.2013
comment
Я предлагаю вставить предварительную проверку и возможную установку в вашу программу (если она может быть запущена без этого предварительного условия). Вы можете, например, сохранить эту информацию в файле .ini и прочитать ее с помощью своей программы, если она не найдена, вызовите System.Diagnostics.Process.Start (Requisite.exe); запустить это - person dendini; 04.07.2013
comment
Это потребует повторного повышения прав до уровня администратора для установки необходимых компонентов. Прекрасно для вас и меня, но неприемлемо при установке специального программного обеспечения в строго управляемом домене, например, на промышленном предприятии. - person Remi Beaulieu; 04.12.2020

Вы можете использовать что-то вроде 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
person Nikhil Dabas    schedule 12.08.2013