Forum Delphi.cz

Delphi => Obecné => Téma založeno: peterx684 04-11-2019, 13:51:26

Název: Inno Setup - odinstalace a záloha
Přispěvatel: peterx684 04-11-2019, 13:51:26
Zdravím,
po delší době dělám instalátor v Innu a řeším problém s odinstalací, resp. přesunem zálohovaných souborů na původní místo. Mám pro odinstalaci vytvořený .bat soubor, který když spustím samostatně, tak funguje jak má, ale jakmile se spustí jako součást odinstalace, vyprázdní se pouze složka zálohy, ale zálohované soubory se nepřesunou/chybí v původním umístění. Porovnával jsem instalační skript s dříve psanými skripty a dříve s tím nebyl problém, takže netuším, čím by to mohlo být.

Zde je ukázka toho, jak to mám napsané(bat + inno skript):

inno skript:

Kód: Delphi [Vybrat]
  1. [Files]
  2. ; Backup
  3. Source: "{app}\app\test1.txt"; DestDir: "{app}\backup"; Components: backup; Flags: external skipifsourcedoesntexist uninsneveruninstall
  4. Source: "{app}\app\test2.txt"; DestDir: "{app}\backup"; Components: backup; Flags: external skipifsourcedoesntexist uninsneveruninstall
  5. Source: "{app}\app\test3.txt"; DestDir: "{app}\backup"; Components: backup; Flags: external skipifsourcedoesntexist uninsneveruninstall
  6.  
  7. ; InstallFiles
  8. Source: "D:\INSTDATA\TEST\test1.txt"; DestDir: "{app}\app"; Flags: ignoreversion recursesubdirs
  9. Source: "D:\INSTDATA\TEST\test2.txt"; DestDir: "{app}\app"; Flags: ignoreversion recursesubdirs
  10. Source: "D:\INSTDATA\TEST\test3.txt"; DestDir: "{app}\app"; Flags: ignoreversion recursesubdirs
  11.  
  12. ; Uninstall
  13. Source: "D:\INSTDATA\TEST\uninstall.bat"; DestDir: "{app}"; Attribs: hidden system; Components: backup
  14.  
  15. [Types]
  16. Name: "custom"; Description: "Testing app"; Flags: iscustom
  17.  
  18. [Components]
  19. Name: "backup"; Description: Make backup; Types: custom; ExtraDiskSpaceRequired: 0
  20.  
  21. [UninstallRun]
  22. Filename: "{app}\uninstall.bat"; WorkingDir: "{app}"; Components: backup
  23.  

uninstall.bat:

Kód: Delphi [Vybrat]
  1. del "app\test1.txt"
  2. del "app\test2.txt"
  3. del "app\test3.txt"
  4. echo
  5. move /Y "backup\test1.txt"  "app\test1.txt"
  6. move /Y "backup\test2.txt"  "app\test2.txt"
  7. move /Y "backup\test3.txt"  "app\test3.txt


Díky za pomoc
Název: Re:Inno Setup - odinstalace a záloha
Přispěvatel: vandrovnik 04-11-2019, 14:10:30
Dá se do toho .bat dát pause a podívat se, co se vlastně děje? Ideálně si i nechat echo on a ověřit si, že je skript spuštěný ve správné složce.
Název: Re:Inno Setup - odinstalace a záloha
Přispěvatel: peterx684 04-11-2019, 15:11:05
zapl jsem echo a přidal pause na konec bat souboru, výsledkem je tohle:


Kód: Delphi [Vybrat]
  1. D:\Program Files (x86)\Testing app>echo on
  2.  
  3. D:\Program Files (x86)\Testing app>del "app\test1.txt"
  4.  
  5. D:\Program Files (x86)\Testing app>del "app\test2.txt"
  6.  
  7. D:\Program Files (x86)\Testing app>del "app\test3.txt"
  8.  
  9. D:\Program Files (x86)\Testing app>move /Y "backup\test1.txt"  "app\test1.txt"
  10. Přesunuté soubory:         1
  11.  
  12. D:\Program Files (x86)\Testing app>move /Y "backup\test2.txt"  "app\test2.txt"
  13. Přesunuté soubory:         1
  14.  
  15. D:\Program Files (x86)\Testing app>move /Y "backup\test3.txt"  "app\test3.txt"
  16. Přesunuté soubory:         1
  17.  
  18. D:\Program Files (x86)\Testing app>PAUSE
  19. Pokračujte stisknutím libovolné klávesy...
Název: Re:Inno Setup - odinstalace a záloha
Přispěvatel: vandrovnik 04-11-2019, 15:13:17
No podle výpisu se to tváří, že k nějakému přesunu i došlo :-)
Název: Re:Inno Setup - odinstalace a záloha
Přispěvatel: peterx684 04-11-2019, 15:33:19
ano, ale soubory se pouze smažou a původní soubory ze složky backup se nepřesunou, posílám odkaz na data k instalátoru, skript a bat:
"destination files" je cesta k souborům včetně testovacích souboru, určených k přepsání instalátorem, ze kterých se tvoří záloha, "installer data" obsahuje změněné soubory a data pro skript, včetně bat souboru. Jakmile se ale bat spustí v Innu, soubory v cílové složce chybí, nic se reálně nepřesune.
Název: Re:Inno Setup - odinstalace a záloha
Přispěvatel: vandrovnik 04-11-2019, 15:35:27
A pro srovnání, jak to dopadne, když by instalace byla mimo \Program Files? Jestli není problém v tom, že move přesun neudělá kvůli právům. I když bůh ví, proč pak hlásí, že 1 soubor byl zpracován.
Název: Re:Inno Setup - odinstalace a záloha
Přispěvatel: vandrovnik 04-11-2019, 15:36:55
Případně pro zajímavost, jak by to dopadlo, když bys místo move použil copy + del? (del až po ověření, že se povedlo copy.)
Název: Re:Inno Setup - odinstalace a záloha
Přispěvatel: peterx684 04-11-2019, 15:37:34
copy jsem zkoušel také, mělo to stejný efekt
Název: Re:Inno Setup - odinstalace a záloha
Přispěvatel: vandrovnik 04-11-2019, 15:38:51
Třeba soubory slavnostně zkopíruje do nějaké té virtualizované složky, protože to neběží jako správce.
Název: Re:Inno Setup - odinstalace a záloha
Přispěvatel: vandrovnik 04-11-2019, 15:42:58
Jinak možná by tu obnovu souborů šlo udělat přímo v Inno Setupu: http://www.jrsoftware.org/ishelp/index.php?topic=scriptuninstall (http://www.jrsoftware.org/ishelp/index.php?topic=scriptuninstall)
Název: Re:Inno Setup - odinstalace a záloha
Přispěvatel: peterx684 04-11-2019, 16:01:11
je zvláštní, že když uninstall provedu přímo přes bat bez použití odinstalačního exe, tak vše proběhne v pořádku, flagy jsou podle mě správně. Zkoušel jsem vypnout antivir, zda nebrání v přesunu, a zkoušel jsem i instalaci mimo PF a vychází to na stejno.
Název: Re:Inno Setup - odinstalace a záloha
Přispěvatel: pepak 05-11-2019, 05:19:01
Taky si myslím, že na vině bude UAC a jeho virtualizace souborového systému. A jako hlavní podezřelý mi přijde to spouštění baťáku přímo názvem skriptu, s tím jsou problémy s UAC dost běžně - doporučuju, spusť to jako cmd /c skript.bat parametry.

Jo a taková drobnost, příkazy jako copy nebo del jsou psané 32bitově a neumí přístup do adresářů, které jsou virtualizované kvůli 64bit Windowsům (např. C:\Windows\system32).