I have created a setup and deployment project for my .Net 4 app in VS 2010. In my prerequisites i have checked .Net4 prerequisite but i have learned that .Net4 has left out WIC (Windows Imaging Component) to make it light.
When i run my setup in Vista/Win7 the Net4 installation does not give error for WIC but when i install it in XP it gives error for WIC. Then i have to install WIC manually first and then run my setup.
I need a bootstrapper for WIC which runs before .Net4 installation in XP. Please suggest how it can be done or a link for it. Thanks in Advance.
I've faced this annoying problem a long time ago and wrote exactly what you need. My bootstrapper is used in production for more than a year in project Grammatica. To be honest, I found the original somewhere on pastebin, but it was way too big and contained some bugs, I give you my final version.
For the lazy ones, just DOWNLOAD THIS and unpack it to "%PROGRAMFILES(x86)%\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages" then restart VS and go to Prerequisites list to see Windows Imaging Component there. In case if the link is dead:
<Product ProductCode="Windows.Imaging.Component" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
<PackageFiles CopyAllPackageFiles="false">
<PackageFile Name="wic_x86.exe" HomeSite="http://download.microsoft.com/download/f/f/1/ff178bb1-da91-48ed-89e5-478a99387d4f/wic_x86_enu.exe" PublicKey="3082010a0282010100cd819638ae5ca2f2c1dfded0ab958dd63c9d1f8bc35d862e5df0b172f5abac886ab5dab1227b0bc8c8a54b915e2213e9f9f5239db5f46e76aeefeea43cc7c4c0595c3fabb3733326a662816179a162f46e8895d06eddc79fd2a451117661ba708a65a1961689a75d81d04466e5db569e40cafcdc76242e443000e5d67d7b9511d5581da3e84f0bc988dca2d653996cca63ca996a9a925e4c4d11e82fd35b5b5e5f52a3732da5bb84450d8c191576cb08da9aa67015e84dec69fd5db26b8fed295137388bc6464915945098b0f468a4d7de097167749e778c1d856b97eae75f45cce0e6710dd16300937b31988e0bb413bdb3d0eef1df21eea96061ee37433dc30203010001" />
<PackageFile Name="wic_x64.exe" HomeSite="http://download.microsoft.com/download/6/4/5/645fed5f-a6e7-44d9-9d10-fe83348796b0/wic_x64_enu.exe" PublicKey="3082010a0282010100cd819638ae5ca2f2c1dfded0ab958dd63c9d1f8bc35d862e5df0b172f5abac886ab5dab1227b0bc8c8a54b915e2213e9f9f5239db5f46e76aeefeea43cc7c4c0595c3fabb3733326a662816179a162f46e8895d06eddc79fd2a451117661ba708a65a1961689a75d81d04466e5db569e40cafcdc76242e443000e5d67d7b9511d5581da3e84f0bc988dca2d653996cca63ca996a9a925e4c4d11e82fd35b5b5e5f52a3732da5bb84450d8c191576cb08da9aa67015e84dec69fd5db26b8fed295137388bc6464915945098b0f468a4d7de097167749e778c1d856b97eae75f45cce0e6710dd16300937b31988e0bb413bdb3d0eef1df21eea96061ee37433dc30203010001" />
</PackageFiles>
<InstallChecks>
<FileCheck Property="VersionPMHdll32" FileName="PhotoMetadataHandler.dll" SearchPath="system32" SpecialFolder="WindowsFolder" />
<FileCheck Property="VersionPMHdll64" FileName="PhotoMetadataHandler.dll" SearchPath="SysWOW64" SpecialFolder="WindowsFolder" />
</InstallChecks>
<Commands Reboot="Defer">
<Command PackageFile="wic_x86.exe"
Arguments="/quiet /norestart"
EstimatedInstalledBytes="1200000"
EstimatedTempBytes="3700000"
EstimatedInstallSeconds="60">
<InstallConditions>
<BypassIf Property="ProcessorArchitecture" Compare="ValueNotEqualTo" Value="Intel" />
<BypassIf Property="VersionPMHdll32" Compare="VersionGreaterThanOrEqualTo" Value="6.0.5840.16388" />
<BypassIf Property="VersionNT" Compare="VersionGreaterThanOrEqualTo" Value="6.0.0" />
<!-- Requires the user to be an admin user when installing the prerequisite -->
<FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired"/>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="1641" Result="SuccessReboot"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
</ExitCodes>
</Command>
<Command PackageFile="wic_x64.exe"
Arguments="/quiet /norestart"
EstimatedInstalledBytes="1200000"
EstimatedTempBytes="6400000"
EstimatedInstallSeconds="60">
<InstallConditions>
<BypassIf Property="ProcessorArchitecture" Compare="ValueNotEqualTo" Value="AMD64" />
<BypassIf Property="VersionPMHdll64" Compare="VersionGreaterThanOrEqualTo" Value="6.0.5840.16388"/>
<BypassIf Property="VersionNT" Compare="VersionGreaterThanOrEqualTo" Value="6.0.0" />
<!-- Requires the user to be an admin user when installing the prerequisite -->
<FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired"/>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="1641" Result="SuccessReboot"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
</ExitCodes>
</Command>
</Commands>
</Product>
Just go to %PROGRAMFILES(x86)%\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages, create a folder called WIC or smth else, than put this xml there and call it 'product.xml', put 'wic_x86_enu.exe' near it, create a folder "en" and put this 'package.xml' into it:
<?xml version="1.0" encoding="utf-8"?>
<Package Name="DisplayName" Culture="Culture" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
<Strings>
<String Name="Culture">en</String>
<String Name="DisplayName">Windows Imaging Component</String>
<String Name="Anunexpectedexitcodewasr">An unexpected exit code was returned from the installer. The installation failed.</String>
</Strings>
</Package>
Restart your Visual Studio and you'll see it in the list of prerequisites.
NOTE: it installs WIC only IF NEEDED for .NET installation. It won't install WIC, if the system doesn't need it. It won't install .NET, only WIC. So in order to install .NET and WIC (if needed), just add both prerequisites (my for WIC and built-in for .NET).
来源:https://stackoverflow.com/questions/9188274/vs-2010-bootstrapper-for-wic-windows-imaging-component-before-net-4-installat