Mam Instalatora Windows dla mojej aplikacji. Pakiet aplikacji zawiera również klasę Instalatora, w której wykonywane są niektóre czynności, inne są wykonywane w Akcje niestandardowe.Problemy dotyczące instalowania aplikacji za pomocą Instalatora Windows
Instalator instaluje inną aplikację z akcji niestandardowych podczas instalacji. Chcę wiedzieć, czy ta aplikacja już istnieje w tej samej wersji Nie chcę instalować ani dostarczać Messagebox asknig do ponownego zainstalowania Y/N.
Jeśli moja aplikacja jest już zainstalowana i ponownie klikam ten sam instalator, otrzymuję opcje "Napraw" i "Usuń". Ale jeśli instalator jest nowo zbudowany, pojawia się okno dialogowe z informacją "Inna wersja jest już zainstalowana ... usuń za pomocą Dodaj usuwanie programów ..". Nie mogę więc zaktualizować istniejącej wersji bez jej odinstalowania. Jak mogę zaktualizować istniejącą wersję?
Każda pomoc lub wskazówki dla tych 2 zapytań są bardzo cenne. Spojrzałem na sieć, ale nie mogłem uzyskać odpowiedzi na pytanie. Jeśli możesz mi pomóc, to byłoby naprawdę świetnie.
KOD
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>
UPDATE: chcę zainstalować XYZ, jeśli nie jest zainstalowany na alerady PC. W przypadku kodu Above nie jest instalowany jako Wymaganie wstępne. W polu Wymaganie wstępne zaznaczam swoją aplikację (wraz z Instalatorem Windows 3.1 & .NET3.5) i wybrałem opcję "Pobierz prereq z tej samej lokalizacji co moja aplikacja". W projekcie Build of setup otrzymuję 3 foldery w moim Rel (dla winIns, Net & moja aplikacja jest instalowana jako preq, np. XYZ). Obecnie XYZ nie jest zainstalowany na moim komputerze, więc klucz nie zostanie znaleziony. Kiedy instaluję instalator, instaluje on aplikację, ale nie aplikację wstępną, np. XYZ.exe. Gdzie się mylę?
Dzięki.
W jaki sposób instaluje się drugą aplikację w Akcji niestandardowej, czy jest to kolejny MSI? – Jodrell
@Jodrell, druga aplikacja to plik instalatora systemu Windows. W Akcji niestandardowej dodałem ten plik w opcji Instaluj. W związku z tym jest on wykonywany podczas procesu instalacji, a plik exe instaluje inną aplikację – Tvd