Установите .net Framework 4.0 из Интернета автоматически, когда это необходимо, со сложным списком файлов в установке.

У меня уже есть проект установки, который содержит несколько файлов, библиотеки DLL, приложение Windows Forms и службу Windows. Все написано на C# (.net).

Я использую WiX для настройки установки msi, и теперь файл выглядит так:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

  <Product Id="*" Name="App Name" Language="1033" Version="1.0.0"
           Manufacturer="Company Name" UpgradeCode="GUID-HERE">

    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <Icon Id="InstallIcon" SourceFile="msiicon.ico" />
    <Property Id="ARPPRODUCTICON" Value="InstallIcon" />

    <Media Id="1" Cabinet="SingleCab.cab" EmbedCab="yes" />

    <Feature Id="ProductFeature" Title="Title" Level="1">
      <!-- Some features here-->
    </Feature>

    <UI><!-- Many UI here--></UI>
  </Product>

  <!-- Some fragments tag here -->
</Wix>

Но мне нужно вставить чек .net Framework 4.0. А если .net Framework 4.0 не установлен, запустите веб-установку автоматически.

Поэтому я искал и нашел много похожих примеров того, как это сделать. Почти все примеры, которые я нашел, включали теги Bundle, Chain и MsiPackage.

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

Смотрите, во всех примерах (получите следующую строку из здесь) включение проекта происходит в этой строке:

<MsiPackage
  SourceFile="$(var.SetupProject1.TargetPath)">
</MsiPackage>

Но у меня нет проекта Visual Studio, у меня много файлов в теге продукта. Тег продукта не работает внутри <Bundle> или внутри <MsiPackage>, так что я знаю? Как разместить весь мой <Product> контент внутри этого.


person Jonny Piazzi    schedule 06.09.2013    source источник
comment
Если вы хотите установить и .NET, и пакет .MSI — как одну операцию, которую видит конечный пользователь, вы можете использовать Burn для создания пакета: wixtoolset.org/documentation/manual/v3/howtos/   -  person Morten Frederiksen    schedule 06.09.2013
comment
Но проблема в том, что в этом примере или в вашей ссылке на документацию всегда используется ссылка на проект Visual Studio типа $(var.SetupProject1.TargetPath). Я использую WiX с уже скомпилированными файлами, а не для проектов.   -  person Jonny Piazzi    schedule 06.09.2013


Ответы (1)


Во-первых, давайте установим некоторые базовые знания...

Проекты WiX — это проекты Visual Studio. Проекты Visual Studio — это проекты MSBuild. Проекты MSBuild представляют собой XML-файлы. Как правило, проект MSBuild импортирует другие проекты MSBuild в виде библиотек (с расширением .targets), поскольку большая часть информации, необходимой для сборки проекта, является общей для всех проектов одного типа (например, .csproj). Проекты MSBuild можно создавать с помощью msbuild.exe, который входит в состав .NET Framework. Проекты MSBuild в конечном итоге выполняют задачи по сборке проекта. Задачи обычно представляют собой вызовы инструментов командной строки или, если они доступны, эквивалентный вызов функции библиотеки.

Для использования исходных файлов WiX вызываются WiX-scandle.exe и light.exe. Чтобы сгенерировать некоторые исходные файлы WiX, можно вызвать WiX'sheat.exe.

WiX предоставляет задачи MSBuild, чтобы сделать это за вас. Он также предоставляет шаблоны проектов MSBuild, которые импортируют эти задачи. Обычно вы используете IDE, например Visual Studio (не экспресс) или SharpDevelop (бесплатно) для преобразования шаблона проекта в проект. Но вы можете написать файл проекта вручную, обратившись к примеру. Опять же, такие проекты можно построить, вызвав msbuild.exe, или среда IDE может вызвать MSBuild вместо вас.

С помощью IDE удобно редактировать как исходные файлы WiX, так и проекты. Файл проекта можно редактировать с помощью конструктора проектов IDE или редактора XML. (В обозревателе решений VS выполните выгрузку проекта, а затем редактирование проекта.) Поскольку и исходные файлы, и проекты представляют собой XML, среда IDE должна предоставлять помощь на основе схемы XML файла.

Многие типы проектов (например, .csproj и .wixproj) позволяют проекту ссылаться на другие. Назначение и функция ссылки на проект зависят от импорта MSBuild для проекта. Вы, вероятно, знакомы со ссылкой на проект C# в проекте C#. Как минимум, можно было бы ожидать, что проект, на который ссылаются, создается до проекта, на который ссылается.

Проект WiX может ссылаться на проекты .NET (например, .csproj) или другие проекты WiX. Для каждой ссылки на проект WiX определяет некоторые полезные переменные на основе имени упоминаемый проект. Например: если у вас есть проект загрузчика WiX, он может ссылаться на проект установки WiX с именем SetupProject1, поэтому var.SetupProject1.TargetPath будет определен для использования в исходном коде загрузчика. Другой пример: если у вас есть проект установки WiX, он может ссылаться на проект C# с именем ConsoleApplication1, поэтому будет определено var.ConsoleApplication1.TargetPath. В обоих примерах целевой путь, скорее всего, зависит от конфигурации проекта (например, отладка, выпуск). WiX указывает переменным соответствующий путь, определенный в указанном проекте на основе конфигурации.

Нижняя линия

  1. Элемент Product используется в проекте настройки WiX; Элемент Bundle используется в проекте WiX Bootstrapper. (Если вы не используете файлы проекта, вы должны вызвать инструменты командной строки WiX один раз для продукта и один раз для пакета).
  2. Для элемента пакета SourceFile должен быть путем к соответствующему файлу msi или exe. Это может быть путь или переменная, определенная в командной строке Candle.exe или через ссылку на проект.
  3. Вероятно, вы упускаете из виду удобство использования проектов WiX и MSBuild. Как и во всех проектах Visual Studio, вы можете не использовать IDE или выбрать бесплатную или платную IDE. Предположительно, вы уже используете IDE и MSBuild для своих проектов C#. Их использование для проекта WiX мало чем отличается от добавления проекта VB.NET в ваше решение.

Вам следует рассмотреть проект установки WiX, который ссылается на ваши проекты C#, и проект загрузчика WiX, который ссылается на ваш проект установки WiX. Создайте решение, и готово!

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

person Tom Blodget    schedule 07.09.2013