2011-08-09 28 views
7

Creé bootstrapper, funciona pero no instala NET Framework 4.0. Una vez completada la instalación, mi aplicación no se inicia porque no hay NET Framework 4.0. ¿Por qué no instala NETF 4.0?¿Cómo instalar .NET Framework 4.0 como parte de la instalación?

<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

El camino que está proporcionando "C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bootstrapper" será aplicable sólo para máquinas de 64 bits, no se ejecutará en máquinas de 32 bits –

+0

¿Por qué? ¿Qué necesito usar? – Oleg

+0

No hay solución para esto en WIX. Yo también tuve el mismo problema, después de googlear y RnD obtuve esta respuesta –

Respuesta

0

I utilizarse dotnetinstaller para la comprobación y la instalación de pre-requisitos. Es muy simple y fácil de usar. También proporciona la posibilidad de convertir msi en exe y adjuntar el aviso de UAC. Necesita tener un configuration file

Luego en su proyecto en el evento posterior a la construcción agregue este código. Esto incrustará su msi y el archivo de requisitos previos.

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+ 
+0

Thnx, pero tengo el proyecto Wix Installer y solo necesito agregar NET Framework Installation. – Oleg

+0

sí, estoy de acuerdo. el código que proporcioné aquí es solo para instalar .NET Framework 4.0 –

3

Todos los elementos en el grupo de artículos deben tener el mismo nombre, "BootstrapperFile" - en la actualidad tendrá dos grupos de artículos, por lo que el .Net Framework no serán incluidos en el programa previo (ya que está en una diferente grupo de artículos llamado "BootstrapperPackage".

Aunque la mayoría de los ejemplos en la red usan "BootstrapperFile" o "BootstrapperPackage", el nombre no es significativo, solo tiene que alinearse con el parámetro de la tarea de generación de bootstrapper - lamentablemente la consistencia de ejemplos en algunos casos pueden llevar a conceptos erróneos :)

Una vez corregido, el otro thi Para comprobarlo, al construir tanto en su máquina local como en el servidor de compilación (si tiene uno) no se registran advertencias, la tarea de generación boostrapper de forma predeterminada no causará que la compilación falle si uno o más paquetes pueden ' t estar ubicado.

verá esto en los registros msbuild como:

  • advertencia MSB3155: Elemento' .NETFramework, versión = v4.0' no pudo ser localizado en ''.

maneras fáciles de detectar este es el caso con su programa previo, son:

  1. Su archivo .exe generado es inusualmente pequeña - decir 300-400K.
  2. Borre su archivo .MSI de acompañamiento, luego ejecute el programa de arranque - generará un archivo de registro (al que proporciona la ruta en un mensaje de error). El archivo de registro enumerará los paquetes que fueron marcados (para ver si necesitan ser ejecutados), junto con lo que se ejecutó. Si su paquete no estaba en la lista, es probable que no esté en el programa de arranque.
5

En el archivo wixproj, agregue la siguiente estructura. Tenga en cuenta que las etiquetas <WixTargetsPath> deben residir en el primer nodo <PropertyGroup>, junto con el resto de lo que suele haber allí.

<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> 
+0

Este bloque de código parece mostrar ediciones en el archivo de proyecto wix Y en un archivo .wxs. Esto es confuso. La etiqueta de cierre es. ¿Debería ser? –

+0

Además, esto no funciona. Es lookign para los iniciadores en el directorio actual del instalador. –

Cuestiones relacionadas