2013-06-18 4 views
2

Я хочу, чтобы моя установка завершилась с ошибкой, если предыдущая версия приложения уже установлена.WIX Bundle bal: condition - util: переменная RegistrySearch всегда истинна

Я пытаюсь выполнить поиск в UpgradeCode в файле RegEdit. Имя значения обновляемого кода - «BundleUpgradeCode». Однако, даже если в regedit нет записи, журнал для Bootstrap возвращает значение условия как истинного. Я не уверен, что происходит не так.

<util:RegistrySearchRef Id="SearchForInstaller" /> 

    <util:RegistrySearch Id="VSTORuntimeTest" Root="HKLM" Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4R\" Value="VSTORFeature_CLR40" Variable="VSTORFeature"/> 
    <util:RegistrySearch Id="VSTORuntimeVersionV4R" Root="HKLM" Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4R\" Value="Version" Variable="VSTORVersionV4R"/> 
    <util:RegistrySearch Id="VSTORuntimeVersionV4" Root="HKLM" Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4R\" Value="Version" Variable="VSTORVersionV4"/> 

    <util:RegistrySearch Id="DotNetTest" Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Client" Value="Install" Variable="DotNetInstall"/> 
    <util:RegistrySearch Id="DotNetVersion" Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Client" Value="Version" Variable="DotNetVersion"/> 

    <Chain> 
     <ExePackage Id="dotNetFx40_Client_x86_x64" SourceFile="$(var.PreReqPath)\DotNetFX40Client\dotNetFx40_Client_x86_x64.exe" PerMachine="yes" Cache="no" 
        Compressed="no" 
        DownloadUrl="http://download.microsoft.com/download/7/B/6/7B629E05-399A-4A92-B5BC-484C74B5124B/dotNetFx40_Client_setup.exe" 
        Permanent="yes" 
        InstallCommand="/q /norestart" 
        DetectCondition="NOT DotNetInstall" 
        InstallCondition="NOT DotNetInstall OR NOT (DotNetVersion >=v4.0.30319)" /> 

     <ExePackage Id="VSTORuntime" SourceFile="$(var.PreReqPath)\VSTOR40\vstor_redist.exe" Permanent="yes" Vital="yes" Cache="no" Compressed="no" 
        DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=158917" 
        PerMachine="yes" 
        InstallCommand="/q /norestart" 
        DetectCondition="VSTORFeature" 
        InstallCondition="NOT VSTORFeature OR NOT (VSTORVersionV4R >=v10.0.40303) OR NOT (VSTORVersionV4 >=v10.0.21022)" /> 

     <MsiPackage SourceFile="$(var.AEMSetup.TargetPath)" Vital="yes" Compressed="no" Id="WordAddIns" DisplayInternalUI="yes"/> 
    </Chain> 
</Bundle> 
<Fragment> 
    <util:RegistrySearch Id="SearchForInstaller" Variable ="BundleUpgradeCode" Root="HKLM" Key="SOFTWARE\Wow6432Node\Microsoft\Windows" Result="exists" /> 

    <bal:Condition Message="Another version of this product is already installed. Installation of version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs in Control Panel." >BundleUpgradeCode</bal:Condition> 

</Fragment> 

[0E98: 0390] [2013-06-18T13: 22: 49] I000: Установка строки переменной 'WixBundleName' в значение «Avanade оценки модели - v3. 4.3 ' [0E98: 0390] [2013-06-18T13: 22: 49] i100: обнаружение начинается, 3 пакета [0E98: 0390] [2013-06-18T13: 22: 49] i000: установка строковой переменной ' DotNetInstall 'для значения' 1 '[0E98: 0390] [2013-06-18T13: 22: 49] i000: Установка строковой переменной' D otNetVersion 'to value' 4.5.50709 ' [0E98: 0390] [2013-06-18T13: 22: 49] i000: Установка числовой переменной ' BundleUpgradeCode 'для значения 1 [0E98: 0390] [2013-06-18T13: 22:49] i000: Установка строковой переменной 'VSTORFeature' в значение '1' [0E98: 0390] [2013-06-18T13: 22: 49] i000: установка строковой переменной 'VSTORVersionV4' для значения '10 .0.40303 ' [0E98: 0390] [2013-06-18T13: 22: 49] i000: установка строковой переменной ' VSTORVersionV4R 'для значения '10 .0.40303' [0E98: 0390] [2013-06-18T13: 22: 49 ] i102: обнаруженный связанный пакет: {4edb6855-8f5b-438b-9a6b-4598e7083cd7}, тип: Модернизация, сфера: PerMachine, версия: 3.4.2.0, операция: MajorUpgrade [0E98: 0390] [2013-06-18T13 : 22: 49] i052: Условие «NOT DotNetInstall» оценивает значение false. [0E98: 0390] [2013-06-18T13: 22: 49] i052: Условие «VSTORFeature» оценивается как true. [0E98: 0390] [2013-06-18T13: 22: 49] i101: Обнаруженный пакет: dotNetFx40_Client_x86_x64, состояние: отсутствует, кэшировано: нет [0E98: 0390] [2013-06-18T13: 22: 49] i101 : Обнаруженный пакет: VSTORuntime, состояние: присутствует, кэшировано: нет [0E98: 0390] [2013-06-18T13: 22: 49] i101: Обнаруженный пакет: WordAddIns, состояние: присутствует, кэшировано: завершено [0E98: 0390 ] [2013-06-18T13: 22: 49] i052: Условие «BundleUpgradeCode» оценивает значение true. [0E98: 0390] [2013-06-18T13: 22: 49] i199: Обнаружение полный, результат: 0x0

Любая помощь будет оценена. Заранее спасибо.

ответ

0

Попробуйте найти ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows вместо ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ \ Wow6432Node \ Microsoft \ Windows. Вам не нужно давать WOW6432Node в этом случае

1

BundleUpgradeCode переменным возвращается 1 из RegistrySearch, если запись реестра доступна. Как я понял, мы можем считать, что предыдущая версия установлена, если запись в реестре доступна. В этом случае вам необходимо установить

(BundleUpgradeCode=0) or Not (BundleUpgradeCode=1)

оценить состояние ложной. Чтобы программа установки завершила сбой и отобразила сообщение Condition.

<bal:Condition Message="Another version of this product is already installed. Installation of version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs in Control Panel." >Not (BundleUpgradeCode=1)</bal:Condition> 

Я подозреваю, что неправильное состояние поиска в регистре. Почему вы использовали Wow6432Node, поскольку RegistrySearch имеет атрибут «Win64»

+0

Спасибо! Спасите мое время! Работает. – Konstantin

 Смежные вопросы

  • Нет связанных вопросов^_^