Как install.NET 4.5 с пакетом WiX?
мне нужно включить Microsoft .NET 4.5 в качестве предварительного условия с моим пакетом установки, и я хочу, чтобы он был как можно более автоматическим. Тем не менее, .Сетка должна не быть удалены при unistalling. Я думаю, что я прочитал почти все о том, как использовать DetectCondition
и/или InstallCondition
, но я все еще не понимаю его правильно; он либо всегда запускает установку .NET, либо никогда не запускает ее.
вот моя последняя настройка:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:netfx='http://schemas.microsoft.com/wix/NetFxExtension'>
<!-- Define minimum .NET Framework version -->
<?define NetFx45MinRelease = 377811?>
...
<Chain>
<PackageGroupRef Id="Netfx45FullPackage"/>
...
</Chain>
<PackageGroup Id="Netfx45FullPackage">
<ExePackage Id="Netfx45Full" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
SourceFile="........EnvironmentInstallerResourcesPrerequisitesdotnetfx45_full_x86_x64.exe"
InstallCommand="/passive /norestart"
DetectCondition="NETFRAMEWORK45 >= $(var.NetFx45MinRelease)"
InstallCondition="NOT REMOVE AND (NETFRAMEWORK45 < $(var.NetFx45MinRelease))" />
</PackageGroup>
(Почему-то, Я должен был определить NetFx45MinRelease
себя, хотя он должен был быть включен в WixNetFxExtension.)
как я могу получить правильные настройки?
2 ответов
Я не совсем уверен, почему у вас возникли проблемы, но у меня была та же задача, и она (теперь ;-) работает по назначению. То есть он устанавливает .NET 4.5 только при необходимости и не будет выполнять удаление .NET при удалении загрузчика в целом.
однако, .NET 4.5 можете быть удалены индивидуально, что я думаю, что это хорошо.
Это то, что я использовал (скорее всего, получено из других сообщений переполнения стека):
<PackageGroup Id="Netfx45Xxx">
<ExePackage Id="Netfx45Xxx" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q"
SourceFile="C:\wixtest\dotnetfx45_full_x86_x64.exe"
DetectCondition="(Netfx4FullVersion="4.5.50709") AND (NOT VersionNT64 OR (Netfx4x64FullVersion="4.5.50709"))"
InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion="4.5.50709" OR Netfx4x64FullVersion="4.5.50709"))"/>
</PackageGroup>
в странно то, что у вас уже есть Permanent="yes", что действительно является ключом к сохранению .NET при удалении.
одно отличие заключается в том, что у меня нет явного "не удалить" в InstallCondition, возможно, это более запутанно, чем полезно для установщика Windows...?
Я использую WiX 3.7.1224.0, который в настоящее время является последним.
один комментарий к ответу TheESJ: даже с предопределенным PackageGroupRef вы можете предоставить локальный файл, чтобы избежать загрузки. Просто поместите его в папку" redist " ниже вашего файла Bootstrapper EXE, и он будет взят оттуда, если присутствует без загрузки. Я нашел это поведение вчера через файл журнала после неисправной установки.
вам не нужно определять PackageGroup. Это содержится в WixNetFxExtension. См.http://wix.sourceforge.net/manual-wix3/install_dotnet.htm. Все, что вам нужно сделать, это включить ссылку на WixNetFxExtension в свой wixproj, а затем добавить PackageGroupRef в одну из описанных здесь PackageGroups:http://wix.sourceforge.net/manual-wix3/wixnetfxextension.htm к вашей цепи.