У меня есть установщик Windows для моего приложения. Пакет приложения также содержит класс Installer, где некоторые действия выполняются, другие выполняются в пользовательских действиях.
Установщик устанавливает другое приложение из пользовательских действий во время установки. Я хочу знать, если это приложение уже существует той же версии, я не хочу устанавливать или предоставлять запрос окна сообщения для переустановки Y / N.
Если мое приложение уже установлено и я снова нажимаю на тот же установщик, я получаю опции «Восстановить» и «Удалить». Но если программа установки была только что построена, я получаю диалоговое окно с сообщением «Другая версия уже установлена ... удалите, используя« Установка и удаление программ ».». Поэтому я не могу обновить существующую версию, не удалив ее. Как я могу обновить существующую версию?
Любая помощь или руководство по этим 2 запросам высоко ценится. Я искал в сети для них, но не мог получить ответы apropriae. Если бы вы могли мне помочь, это было бы действительно здорово.
КОД
prouct.xml
<?xml version="1.0" encoding="utf-8" ?>
<Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
ProductCode="My.Bootstrapper.ABC">
<!-- Create Package, Product Manifest http://msdn.microsoft.com/en-us/library/ee335702.aspx
Schema Reference : http://msdn.microsoft.com/en-us/library/ms229223.aspx
-->
<PackageFiles>
<PackageFile Name="XYZ.exe"/>
</PackageFiles>
<InstallChecks>
<!-- If its installed, it will be in Uninstall. DisplayName will be XYZ2.1_rc22
Can still get values of DisplayVersion (2.1_rc22) & UninstallString from this key
-->
<RegistryCheck
Property="IS_XYZ_INSTALLED"
Key="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\XYZ"
Value="DisplayName"/>
</InstallChecks>
<Commands>
<Command PackageFile="XYZ.exe" Arguments="/Install">
<InstallConditions>
<BypassIf Property="IS_XYZ_INSTALLED"
Compare="ValueEqualTo" Value="XYZ2.1_rc22"/> // tHIS IS THE DISPLAYNAME, THAT I SEE IN REGISTY
<FailIf Property="AdminUser"
Compare="ValueNotEqualTo" Value="True"
String="NotAnAdmin"/>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="1641" Result="SuccessReboot"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail" String="GeneralFailure"/>
</ExitCodes>
</Command>
</Commands>
</Product>
package.xml
<?xml version="1.0" encoding="utf-8" ?>
<Package xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
Name="DisplayName" Culture="Culture">
<!--Check for XYZversion 2.1_rc22 -->
<Strings>
<String Name="DisplayName">Install My XYZ</String>
<String Name="Culture">en</String>
<String Name="NotAnAdmin">Administrator permissions are required to install XYZ.Contact your
administrator.</String>
<String Name="GeneralFailure">A general error has occurred while installing this
package.</String>
</Strings>
</Package>
ОБНОВЛЕНИЕ:
Я хочу установить XYZ, если он не установлен на компьютере. С кодом выше он не устанавливается как предварительное условие. В Prerequisite я выбираю свое приложение (вместе с установщиком Windows 3.1 и .NET3.5) и выбираю «Загрузить prereq из того же места, что и мое приложение». При сборке проекта установки я получаю 3 папки в своем Rel (для winIns Net и мое приложение должны быть установлены как preq, то есть XYZ). В настоящее время XYZ не установлен на моем компе - поэтому ключ не будет найден. Когда я устанавливаю установщик, он устанавливает приложение, но не приложение prereq i.e XYZ.exe. Куда я иду не так?
Спасибо.