2013-06-21 2 views
1

Я пытаюсь запустить приложение для загрузки, используя приложение WixStandardBootstrapperApplication. Пока что он отлично подходит для всего, что мне нужно, даже при работе с перезагрузкой. Процесс выглядит следующим образом: я проверяю, установлен ли на компьютере .net 4.5, если нет, то установите .net 4.5. После того, как он будет установлен, сгорит, он знает, что нужно перезапустить, потому что я обрабатываю коды выхода. После возобновления программа установки обрабатывает еще три файла .exe, одна из которых зависит от установки .net. Все это действительно хорошо работает до перезагрузки, после чего загрузчик пытается восстановить каждую последующую установку exe, удваивая время выполнения. Это не так уж плохо, за исключением того, что установка .net 4.5 занимает настолько много времени, что удвоение очень нежелательно. Я попытался оставить команду восстановления, и я заметил, что нет никакой формы RepairCondition, такой как установка и обнаружение условий. Есть ли способ предотвратить процесс ремонта?Wix устанавливает, а затем пытается восстановить

Вот код Загрузчик:

<Chain> 
     <ExePackage Id="NetFx45Redist" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q /norestart" RepairCommand="/q" 
       SourceFile="...\...\Setup Files\dotNetFx45_Full_setup.exe" 
       DetectCondition="(Netfx4FullVersion=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))" 
       InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))" 
       RepairCondition="" > 
     <ExitCode Value="1641" Behavior="forceReboot"/> 
     <ExitCode Value="3010" Behavior="forceReboot"/> 
     <ExitCode Value="0" Behavior="success"/> 
     <ExitCode Behavior="error"/> 
     </ExePackage> 
     <ExePackage 
     SourceFile="...\...\Setup Files\Encoder_en.exe" 
     InstallCommand="/q" 
     RepairCommand="/q"> 
     <ExitCode Behavior="success"/> 
     </ExePackage> 
     <ExePackage 
     SourceFile="...\...\Setup Files\vcredist_x86.exe" 
     InstallCommand="/q" 
     RepairCommand="/q"> 
     <ExitCode Behavior="success"/> 
     </ExePackage> 
     <ExePackage 
     SourceFile="...\...\Setup Files\vcredist_x64.exe" 
     InstallCommand="/q" 
     RepairCommand="/q"> 
     <ExitCode Behavior="success"/> 
     </ExePackage> 
     <!-- installer for actual software at some point --> 
</Chain> 

Я знаю, что это в основном хак иметь поведение быть успешным для этих других .exe, но пока проблема ремонта не будет обработано, они должны в противном случае программа установки говорит, что это не удается. Я попытался удалить команды восстановления из них тоже, и это, похоже, не помогает, поэтому я сделал их тихими, по крайней мере, они не появляются и не смущают пользователя.

ответ

2

Вам нужны точные значения атрибутов DetectCondition для каждого пакета, который не является MsiPackage. Burn не имеет возможности определить, что может сделать произвольный .exe, поэтому он полагается на вас, чтобы рассказать об этом. Без условия обнаружения Burn всегда будет устанавливать пакет. Для .NET, вы должны использовать DetectCondition из WiX:

<?define NetFx45MinRelease = 378389?> 
... 
    <util:RegistrySearch 
     Id="NETFRAMEWORK45" 
     Variable="NETFRAMEWORK45" 
     Root="HKLM" 
     Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" 
     Value="Release" 
     Result="value" /> 
... 
DetectCondition="NETFRAMEWORK45 &gt;= $(var.NetFx45MinRelease)" 
+0

Благодаря я мог только найти WIX условия до .NET 4 по какой-то причине ... также установка пакета не столько проблем ... это то, что пакеты устанавливаются, но затем сразу после установки, которые они исправляют. –

+0

Я не понимаю, что вы имеете в виду. Пожалуйста, разместите свой журнал записи где-нибудь. –

+0

Nevermind ... лучшее условие обнаружения на самом деле казалось, исправить проблему thamk вас! То, что я имел в виду и раньше, было то, что во время установки bootstrapper установил каждый exe, а затем сразу после этого восстановил бы каждый из них во время одной и той же установки. Это действительно не имело для меня большого смысла, но пока это работает, я не слишком беспокоюсь об этом. –