Y compris .NET installer dans WiX Bundle ne détecte pas s'il est déjà installé

Je suis sur WiX 3.7, et je ne peux pas obtenir le simple <PackageGroupRef Id="NetFx40Web"/> bundle élément de travail, car il ne va pas mettre sur le Net FX package du programme d'installation, ou de l'intégrer dans le setup.exe. J'ai eu recours à la création de mon propre paquet dans mon Bundle.wxs fichier, mais je suis encore avoir des ennuis. Il semble toujours essayer de l'installer .NET 4, même si la machine possède déjà .Installée NETTE.

Je ne suis pas tout à fait sûr de la différence entre InstallCondition et DetectCondition. Je pense que InstallCondition est utilisé pour installer le paquet si l'évaluation est vrai, sinon le désinstaller. Comment est-ce de travailler avec des choses qui sont généralement permanent=oui, comme la plupart des pré-requis? DetectCondition est presque le contraire, je pense qu'il vérifie s'il est déjà sur le système, et si oui, n'est-ce pas l'installer.

Ci-dessous est mon Bundle.wxs fichier qui est dans un Visual Studio WiX programme d'Amorçage de projet. Je suis d'essayer de regarder le registre et la portée de .NET 4.0 clé de registre est là. Si elle est présente, alors je ne veux pas l'installer .NET 4., et si elle n'est pas là, puis l'installer. Mais, ce n'est pas de travail, et elle tente toujours de s'installer .NET.

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Bundle
        Name="MyProgramBootstrapper"
        Version="1.0.0.0"
        Manufacturer="Microsoft"
        UpgradeCode="{2299B51D-9FD8-4278-90C8-2B79DB37F402}">

        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
        <Chain>
          <PackageGroupRef Id="Netfx4Full"/>
          <MsiPackage
              Id="MyProgramInstaller"
              SourceFile="$(var.MyProgramInstaller.TargetPath)"
              Compressed="no"/>
        </Chain>
    </Bundle>

    <Fragment>
        <Property Id="NET40_FULL_INSTALL_32">
            <RegistrySearch
                Id ="SearchNet40_32bit"
                Root="HKLM"
                Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
                Name="Version"
                Type ="raw"/>
        </Property>
        <Property
            Id="NET40_FULL_INSTALL_64">

            <RegistrySearch
                Id ="SearchNet40_64bit"
                Root="HKLM"
                Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
                Name="Version"
                Type ="raw"
                Win64="yes" />
        </Property>

        <WixVariable
            Id="WixMbaPrereqPackageId"
            Value="Netfx4Full" />
        <WixVariable
            Id="WixMbaPrereqLicenseUrl"
            Value="NetfxLicense.rtf" />
        <PackageGroup
            Id="Netfx4Full">
          <ExePackage
              Id="Netfx4Full"
              Cache="no"
              Compressed="no"
              PerMachine="yes"
              Permanent="yes"
              Vital="yes"
              SourceFile="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX40\dotNetFx40_Full_x86_x64.exe"
              DetectCondition="NET40_FULL_INSTALL_32 OR NET40_FULL_INSTALL_64"
              DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193"/>
        </PackageGroup>
    </Fragment>
</Wix>

Programme d'amorçage de l'installateur journal:

[010C:2FB0][2013-05-10T12:07:07]w120: Detected partially cached package: Netfx4Full, invalid payload: Netfx4Full, reason: 0x80070570
[010C:2FB0][2013-05-10T12:07:07]i052: Condition 'NETFRAMEWORK40' evaluates to false.
[010C:2FB0][2013-05-10T12:07:07]w120: Detected partially cached package: MyInstaller, invalid payload: f4832BA0972BDE9B6FA8A19FBB614A7BA, reason: 0x80070570
[010C:2FB0][2013-05-10T12:07:07]i101: Detected package: Netfx4Full, state: Absent, cached: Partial

Mise à jour, avec de la solution. J'ai utilisé le haut-WiX RegistrySearch pour déterminer s'il est installé. J'avais pour référence le WixUtilExtension.dll dans mon Bundle projet. Voici la mise à jour du Bundle.wxs:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
    xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
>
    <Bundle
        Name="MyProgramBootstrapper"
        Version="1.0.0.0"
        Manufacturer="Microsoft"
        UpgradeCode="{2299B51D-9FD8-4278-90C8-2B79DB37F402}">

        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
        <Chain>
            <PackageGroupRef Id="Netfx4Full"/>
            <!-- TODO: Define the list of chained packages. -->
                  <!-- <MsiPackage SourceFile="path\to\your.msi" /> -->
            <MsiPackage
                Id="MyProgramInstaller"
                SourceFile="$(var.MyProgramInstaller.TargetPath)"
                Compressed="no"  />
        </Chain>
    </Bundle>

    <Fragment>
        <util:RegistrySearchRef Id="NETFRAMEWORK40"/>
        <PackageGroup
            Id="Netfx4Full">

            <ExePackage
                Id="Netfx4FullExe"
                Cache="no"
                Compressed="no"
                PerMachine="yes"
                Permanent="yes"
                Vital="yes"
                SourceFile="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX40\dotNetFx40_Full_x86_x64.exe"
                InstallCommand="/q /norestart /ChainingPackage FullX64Bootstrapper"
                DetectCondition="NETFRAMEWORK40"
                DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193"/>
        </PackageGroup>
    </Fragment>
</Wix>
Si j'ai lu votre question correctement, je pense que le titre de votre question est trompeuse. Le problème n'est pas que WixNetfxExtension est de ne pas travailler. Le problème est que vous voulez faire quelque chose qui n'est pas pris en charge par WixNetfxExtension aujourd'hui. Un titre plus descriptif pour d'autres pourrait être: "Comment inclure l' .NET Framework compressé dans un Bundle". Si ma réponse ci-dessous est complètement faux, n'hésitez pas à négliger ce commentaire. 🙂
correct, le titre est trompeur. Je suis en mesure d'inclure les instaler en vrac/adjacente à l'exe, qui est ce que je veux. cependant, mes conditions ne sont pas à la détecter si .NET est déjà installé, et je ne suis pas sûr pourquoi.
Au lieu d'ajouter la réponse à la question que vous pourriez aussi bien l'ajouter comme une réponse. C'est très soutenu être Stackoverflow. (Il est plus difficile de voir qu'il y a un intégré à répondre à la question sans lire la totalité de la chose au lieu de parcourir les réelles réponses)

OriginalL'auteur Stealth Rabbi | 2013-05-09