tasinsahin Ответов: 1

Bootstrapper не устанавливает Access Database Engine и .Net Framework


Привет,
Я пытаюсь создать установщик, который проверяет наличие .net framework и Access Database Engine, если они не существуют, установите их.
Вот мой сверток.wxs;

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 

     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
  <Bundle Name="X" Version="X" Manufacturer="X"

          UpgradeCode="e5262915-9847-495b-8be3-6c9624e0b65e">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
    <Chain>
      <!-- TODO: Define the list of chained packages. -->
      <PackageGroupRef Id="Netfx4Full"/>
      <PackageGroupRef Id="AccessDatabaseEngine4Fullx64"/>
      <PackageGroupRef Id="AccessDatabaseEngine4Full"/>
      <MsiPackage Id="MyApplication1" SourceFile="$(var.MySetup.TargetPath)"/> 
    </Chain> 
  </Bundle>  
  <Fragment>
     
                         
    <util:RegistrySearch Root="HKLM"

                         Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"

                         Value="Version"

                         Variable="Netfx4FullVersion"/>
    <util:RegistrySearch Root="HKLM"

                         Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"

                         Value="Version"

                         Variable="Netfx40x64FullVersion"

                         Win64="yes" />
    <util:RegistrySearch Root="HKLM"

                         Key="SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\InstallRoot"

                         Value="Path"

                         Variable="AcccessDatabaseEnginex64"/>
    <util:RegistrySearch Root="HKLM"

                         Key="SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\InstallRoot"

                         Value="Path"

                         Variable="AcccessDatabaseEngine"

                         Win64="yes"/>
    
     <!--Check for .NET 4.0-->
    <PackageGroup Id="AccessDatabaseEngine4Fullx64">
      <ExePackage Id="AccessDatabaseEngine4Fullx64"

                  DisplayName="Microsoft Access Database Engine(x64)"

                  DownloadUrl="http://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine_x64.exe"

                  Compressed="no"

                  Cache="yes"

                  PerMachine="yes"

                  Permanent="yes"

                  Protocol="netfx4"

                  Vital="yes"

                  SourceFile=".\Access\AccessDatabaseEngine_x64.exe"

                  DetectCondition="NOT AcccessDatabaseEnginex64 OR NOT AcccessDatabaseEnginex"/>
    </PackageGroup>
    
    <PackageGroup Id="AccessDatabaseEngine4Full">
          <ExePackage Id="AccessDatabaseEngine4Full"

                  DisplayName="Microsoft Access Database Engine"

                  DownloadUrl="http://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine.exe"

                  Compressed="no"

                  Cache="yes"

                  PerMachine="yes"

                  Permanent="yes"

                  Protocol="netfx4"

                  Vital="yes"

                  SourceFile=".\Access\AccessDatabaseEngine.exe"

                  DetectCondition="NOT AcccessDatabaseEngine OR NOT AcccessDatabaseEnginex64"/>
    </PackageGroup>
    
    <PackageGroup Id="Netfx4Full">      
      <ExePackage Id="Netfx4Full"

                  DisplayName="Microsoft .NET Framework 4.5"

                  DownloadUrl="http://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe"

                  Compressed="no"

                  Cache="yes"

                  PerMachine="yes"

                  Permanent="yes"

                  Protocol="netfx4"

                  Vital="yes"

                  SourceFile=".\Access\dotNetFx40_Full_x86_x64.exe"

                  InstallCommand="/passive /norestart"

                  DetectCondition="NOT Netfx4FullVersion AND NOT Netfx40x64FullVersion"/>
    </PackageGroup> 
  
  </Fragment> 
</Wix> 

Однако; несмотря на то, что у меня установлен .net framework, он все еще пытается установить его, и с access database engine у меня есть это ошибка

1 Ответов

Рейтинг:
6

Member 11552330

Ваше условие обнаружения неверно, вы видите, как работает условие обнаружения, если оно возвращает false, то оно будет установлено. В данном конкретном случае:

<ExePackage Id="AccessDatabaseEngine4Fullx64"

                  DisplayName="Microsoft Access Database Engine(x64)"

                  DownloadUrl="http://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine_x64.exe"

                  Compressed="no"

                  Cache="yes"

                  PerMachine="yes"

                  Permanent="yes"

                  Protocol="netfx4"

                  Vital="yes"

                  SourceFile=".\Access\AccessDatabaseEngine_x64.exe"

                  DetectCondition="NOT AcccessDatabaseEnginex64 OR NOT AcccessDatabaseEnginex"/>


Burn установит этот пакет только в том случае, если условие обнаружения ложно, что означает, что он попытается установить его только в том случае, если оба пакета уже установлены. Правильный путь был бы:

<ExePackage Id="AccessDatabaseEngine4Fullx64"

                  DisplayName="Microsoft Access Database Engine(x64)"

                  DownloadUrl="http://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine_x64.exe"

                  Compressed="no"

                  Cache="yes"

                  PerMachine="yes"

                  Permanent="yes"

                  Protocol="netfx4"

                  Vital="yes"

                  SourceFile=".\Access\AccessDatabaseEngine_x64.exe"

                  DetectCondition="AcccessDatabaseEnginex64 OR AcccessDatabaseEnginex"/>


Теперь он установит Access Database Engine X64 только в том случае, если какая-либо из двух версий еще не установлена.


Dave Kreskowiak

Ммм ... я серьезно сомневаюсь, что ОП все еще ищет ответ три года спустя.