2015-08-26 2 views
0

Я работаю с управляемым загрузчиком. В моем пакете у меня есть один msi и один пакет exe (большой установщик самораспаковывающегося WinZip), который должен быть установлен до пакета msi. Пакет msi должен проверить, правильно ли был установлен exe-пакет, потому что если установка exe-пакета терпит неудачу или отменена пользователем, msi не следует приступать к установке.

Условия обнаружения оцениваются только в начале установки, а не во время или между установками пакетов. К сожалению, bootstrapper не обнаруживает, был ли exe-пакет поврежден или отменен, поскольку он возвращает 0 всякий раз, когда пользователь отменяет установку.

Вопрос: Существует ли какой-либо метод/трюк для переоценки условия установки после установки пакета exe и только до того, как пакет msi начнет установку, так что будет установлен пакет InstallCondition msi?

Кстати, я могу думать о двух решений:Wix Bundle переоценивает условия перед каждым пакетом

  1. Оценка обнаружения условий (опять писать) внутри MSI, но я хочу сообщить пользователю интерфейс загрузчика.
  2. Чтобы сделать что-то в моем методе bootstrapper, DetectPackageComplete(), но я так не думаю, что это было бы правильно.

Вот мои сегменты кода:

<Bundle 
    Name   = "$(var.ProductName)" 
    Copyright  = "$(var.CopyrightNote)" 
    Version   = "$(var.FileVersion)" 
    Manufacturer = "$(var.Manufacturer)" 
    IconSourceFile = "$(var.IconFile)" 
    UpgradeCode  = "$(var.UpdgradeCode)" 
    AboutUrl  = "$(var.AboutUrl)" 
    Compressed  = "yes" 
    Tag    = "VA" 
    > 

<util:RegistrySearchRef Id="PreReqRuntimeReg"/> 

<Chain> 
     <RollbackBoundary Id="StartPoint" /> 
     <PackageGroupRef Id = "Product_PreReq" /> 

     <MsiPackage  Id      = "MainProduct" 
         DisplayName    = "$(var.ProductName)"      
         DisplayInternalUI  = "no" 
         Cache     = "yes" 
         Visible     = "no" 
         Compressed    = "yes" 
         EnableFeatureSelection = "yes" 
         SourceFile    = "$(var.MainProduct)" 
         Vital     = "yes" 
         InstallCondition  = "PreReqRuntimeVersion=&quot;8.2&quot;" 
     > 
    </Chain> 
    </Bundle> 
<Fragment Id="Product_PreReqs"> 


    <util:RegistrySearch Id="PreReqRuntimeReg" 
     Variable="PreReqRuntimeVersion"      
     Root="HKLM" 
     Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ThirdParty Compiler Runtime 2013"   
     Value="DisplayVersion" 
     Result="value" 
     Win64="yes" 
    /> 

    <PackageGroup Id="Product_PreReq"> 
     <ExePackage Id="PreReqRuntime2013" 
     DisplayName="ThirdParty Compiler Runtime 2013" 
     Description="ThirdParty Compiler Runtime 2013" 
     Cache="no" 
     Compressed="yes" 
     PerMachine="yes" 
     Permanent="yes" 
     Vital="yes" 
     SourceFile="D:\Pre-Reqs\Pre-Req2013_win64_installer.exe" 
     Protocol ="none" 
     DetectCondition="PreReqRuntimeVersion=&quot;8.2&quot;" 
     InstallCondition="(NOT (PreReqRuntimeVersion=&quot;8.2&quot;))" 

     /> 
    </PackageGroup> 

    </Fragment> 

ответ

0

До сих пор, я нашел способ 1 как наилучший вариант (однако, по-прежнему ищет более), т.е. Evaluate обнаружить условия (опять писать) внутри msi. Поэтому, если это не удается, покажите пользователю общее сообщение об ошибке и дайте ссылку файла журнала пользователю.

Однако, все еще ищете какой-то лучший вариант. Кроме того, я сильно чувствую необходимость получения msi-ошибок, интерпретации их и отображения правильного сообщения об ошибке. Любые предложения, помощь более чем приветствуются. .. Спасибо

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