Inno Setup - lze vynutit odinstalaci ?   zodpovězená otázka

C#

dobrý den,

měl bych dotaz jestli je možné v průběhu instalace spustit nejdříve odinstalaci původní verze (jako součást instalátoru)?

Tedy po odklikání dialogů kam se bude instalovat, ověřit jestli se tam nenachází odinstalační soubor a pokud ano, tak jej nedjříve nechat proběhnout.

Není mi jasné jak toto realizovat. Jestli to dát do sekce [Code] a přes ShellExec spustit odinstalaci?

předem děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Šlo by to udělat PascalScriptem v sekci [Code] pomocí funkce InitializeSetup, ale nevidím k tomu jediný důvod. Pokud potřebujete aplikaci upgradovat nebo aktualizovat, případně nedovolit instalaci pokud již je program nainstalován, tak na to má Inno Setup jiné, k tomu určené prostředky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Potřebuji před proběhnutím instalace odstranit původní soubory aplikace, takže mě napadají dvě možnosti:

- buď napsat něco na odstranění původních souborů

- spustit při spuštění instalátoru nejdříve odinstalaci

Prostě potřebuji mít jistotu, že byla provedena nejdříve odinstalace/odstranění souborů kvůli změně určitého řešení v aplikaci. Takže od nejbližší verze bude provedena změna a pokud by se updatovalo z nějaké nižší verze než je doposud, je třeba tu odinstalaci.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já říkám že je to nesmysl. Ve výchozím stavu Inno Setup při kopírování souborů kontroluje verze a pokud je instalovaná verze vyšší než stávající, bude stávající nahrazena (nahrazení se dá vynutit i bez kontroly verze). U datových a konfiguračních souborů lze příznakem nastavit, aby se přepsaly za každých okolností, tudíž také není problém. Soubory, které z nějakého důvodu musí být smazány před instalací lze uvést v sekci [InstallDelete].

Dále si uvědomte, že pokud odstraníte nějaké soubory předchozí verze ručně (nebo pomocí InstallDelete), může dojít při pozdějším pokusu o odinstalování k chybě.

Možná kdybyste byl konkrétnější k tomu co přesně chcete udělat tak bych vám poradil lépe. Nestandardní homemade řešení se totiž často nevyplácí...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Vzhledem k tomu, že jsem chybně umístil soubory které používá aplikace (nemyslím dll, ale ukládají se tam nějaké inf.) přímo do adresáře aplikace, potřebuji změnit uspořádání instalovaných souborů. Proto potřebuji zajistit, aby od následného update a výše bylo (v případě update z těch nižších verzí) nejdříve provedeno odinstalování a nechci spoléhat na to, že to uživatel skutečně sám provede. Myslel jsem, že by bylo lepší to řešit v instalátoru a ne přímo v aplikaci.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nakonec jsem to vyřešil takto:

- vytvořil jsem samostatnou, oddělenou knihovnu (exe) pro provedení mých požadavků

- pomocí instalátoru ji při instalaci spustím

- knihovna po instalaci nezůstává na disku

Děkuji za odpovědi

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To bylo ale naprosto zbytečné. Pomocí prostředků Inno Setupu by to šlo bez problémů udělat a pokud je ta vaše pomocná aplikace .NET, tak ji bez .NET Frameworku (který při instalaci nemusí být nainstalován) nespustíte a jestli je to klíčový krok před instalací tak to není dobré řešení...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Součástí instalace v Inno Setupu mám kontrolu na Framework včetně jeho eventuálního stažení.

Dále k mému řešení, jde o to, že se mi lépe pracuje v C# a také tolik neovládám Inno, takže proto toto řešení. Jinak bych se velice rád přiučil pomocí jakých prostředků to provést. Jednalo by se např. o kontrolu souborů jestli existují a jejich přesun.

Předpokládám, že asi máte namysli zahrnout to do sekce Code ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Snad vám tento příklad vnese trochu světla do dané problematiky. Doporučuji vám do toho PascalScriptu proniknout, potom teprve pocítíte tu neuvěřitelnou sílu Inno Setupu.

[Code]
//Provede se při změně stránky v průvodci instalací
procedure CurStepChanged(CurStep: TSetupStep);
var
  //Soubor k přesunutí
  SettingsFile: String;
begin
  //Provede se před zahájením instalace
  if CurStep = ssInstall then
  begin
    //Umístění souboru k přesunutí je cílová složka vybraná uživatelem + název Settings.xml
    SettingsFile := ExpandConstant('{app}\Settings.xml');
    //Přesunutí se provede pouze pokud soubor existuje
    if FileExists(SettingsFile) then
    begin
      //Zkopírovat soubor do nového umístění (složka Local Settings\Data aplikací)
      //Pokud již soubor existuje, bude přepsán
      if FileCopy(SettingsFile, ExpandConstant('{localappdata}\Application\Settings.xml'), false) then
        begin
          //Po úspěšném zkopírování smazat původní soubor (= přesunutí)
          DeleteFile(SettingsFile);
        end
      else
        begin
          //V případě chyby při kopírování souboru zobrazit upozornění uživateli
          MsgBox('Při přesouvání konfiguračního souboru došlo k chybě.%nPo dokončení instalace se můžete pokusit přesunout konfigurační soubor ručně.', mbError, MB_OK);
        end;
    end;
  end;
end;
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za příklad, určitě mi pomohlo to sestavení cesty k souboru (ExpandConstant('{app}\Settings.xml').

Funkce FileExist a FileCopy jsem v nápovědě našel, ale jak definovat cestu applikace + jméno souboru jsem neobjevil.

Opravdu díky za váš čas

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback