我创建了bootstrapper,它可以工作 但它不安装.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>
答案 0 :(得分:5)
在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>
答案 1 :(得分:3)
项目组中的所有项目都需要具有相同的名称“BootstrapperFile” - 目前您将有两个项目组,因此.Net Framework将不会包含在引导程序中(因为它位于名为“不同的项目组”中) BootstrapperPackage”。
虽然网上的大多数示例都使用“BootstrapperFile”或“BootstrapperPackage”,但名称并不重要,只需要与引导程序生成任务的参数对齐 - 遗憾的是,在某些情况下,示例的一致性会导致误解:)
更正后,要检查的另一件事是,在本地计算机和构建服务器(如果有的话)上构建时没有记录任何警告 - 默认情况下,boostrapper生成任务不会导致构建如果无法找到一个或多个包,则会失败。
您将在msbuild日志中看到:
使用引导程序的简单方法是检测到这种情况:
答案 2 :(得分:0)
我使用dotnetinstaller来检查和安装先决条件。它非常简单易用。它还提供了将msi转换为exe并附加UAC提示的功能。 您需要configuration file
然后在构建后事件的项目中添加此代码。这将嵌入您的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+