Как установить .NET Framework 4.0 как часть установки? - PullRequest
7 голосов
/ 09 августа 2011

Я создал загрузчик, он работает, но не устанавливает NET Framework 4.0.После завершения установки мое приложение не запускается, потому что нет NET Framework 4.0.Почему не устанавливается NETF 4.0?

<ItemGroup>
    <BootstrapperFile Include="Microsoft.Windows.Installer.4.5">
      <ProductName>Windows Installer 4.5</ProductName>
    </BootstrapperFile>
       <BootstrapperPackage Include=".NETFramework,Version=v4.0">
            <Visible>True</Visible>
            <ProductName>.NET Framework 4.0</ProductName>
            <Install>True</Install>
        <Visible>True</Visible>
      </BootstrapperPackage>
  </ItemGroup>
  <Import Project="$(WixTargetsPath)" />
  <Target Name="AfterBuild">
    <GenerateBootstrapper ApplicationFile="DOGInstaller.msi" 
    ApplicationName="DOG" 
    BootstrapperItems="@(BootstrapperFile)" 
    CopyComponents="True" 
    ComponentsLocation="HomeSite"
    OutputPath="$(OutputPath)\en-us\"
    Path="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper" 
    Culture="en" />
  </Target>

Ответы [ 3 ]

5 голосов
/ 18 января 2012

В файле wixproj добавьте следующую структуру.Обратите внимание, что теги <WixTargetsPath> должны находиться в первом узле <PropertyGroup> вместе с остальными элементами, которые обычно находятся там.

<Project>
  <PropertyGroup> <!-- This must be the first PropertyGroup node. -->
    ...
    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
  </PropertyGroup>
  ...
  <ItemGroup>
    <BootstrapperFile Include="Microsoft.Windows.Installer.3.1">
      <ProductName>Windows Installer 3.1</ProductName>
    </BootstrapperFile>
    <BootstrapperFile Include=".NETFramework,Version=v4.0">
      <ProductName>Microsoft .NET Framework 4.0 (x86 and x64)</ProductName>
    </BootstrapperFile>
  </ItemGroup>
  <PropertyGroup>
    <BootstrapperPath>$(ProgramFiles)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\</BootstrapperPath>
  </PropertyGroup>
  <Target Name="AfterBuild">
    <GenerateBootstrapper
      ApplicationFile="$(TargetFileName)"
      ApplicationName="$(OutputName)"
      BootstrapperItems="@(BootstrapperFile)"
      ComponentsLocation="Relative"
      CopyComponents="True"
      OutputPath="$(OutputPath)"
      Path="$(BootstrapperPath)" />
  </Target>
</Product>
3 голосов
/ 17 января 2012

Все элементы в группе элементов должны иметь одинаковое имя «BootstrapperFile» - в настоящее время у вас будет две группы элементов, поэтому .Net Framework не будет включен в загрузчик (так как он находится в другой группе элементов, называемой «BootstrapperPackage ".

Хотя в большинстве примеров в сети используется" BootstrapperFile "или" BootstrapperPackage ", имя не имеет значения, оно просто должно соответствовать параметру задачи генерации загрузчика - к сожалению, последовательность примеров вв некоторых случаях это может привести к неправильным представлениям:)

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

Вы увидите это в журналах msbuild как:

  • предупреждение MSB3155: Элемент '.NETFramework, Version = v4.0' не может быть расположен в ''.

Простые способы определить это в случае с загрузчиком:

  1. Ваш сгенерированный .exe-файл необычайно мал - скажем, 300-400K.
  2. Удалите сопровождающий файл .MSI, затем запустите загрузчик - он сгенерирует файл журнала (путь к которому указан в сообщении об ошибке).В файле журнала будет указано, какие пакеты были проверены (чтобы увидеть, нужно ли их выполнять), а также то, что было выполнено.Если вашего пакета нет в списке, скорее всего, его нет в загрузчике.
0 голосов
/ 09 августа 2011

Я использовал dotnetinstaller для проверки и установки предварительных требований.Это очень просто и легко в использовании.Также он предоставляет возможность конвертировать msi в exe и присоединять подсказку UAC.Вам нужно иметь файл конфигурации

Затем в вашем проекте в событии после сборки добавьте этот код.Это будет ваш MSI и предварительный файл.

copy /Y "$(ProjectDir)Files\dotnetfx35setup.exe" "C:\Windows\Temp"
copy /Y $(TargetPath) "C:\Windows\Temp"
"$(SolutionDir)Tools\dotNetInstaller 2.0\Bin\installerLinker.exe" /o:"$(TargetDir)Setup.exe" /t:"$(SolutionDir)Tools\dotNetInstaller 2.0\Bin\dotNetInstaller.exe" /c:"$(ProjectDir)Files\Configuration.xml" /b:"$(ProjectDir)Files\banner.bmp" /Embed+ /Verbose+
...