Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Verzeichnis auf Zielsystem ermitteln


7 replies to this topic

Tlorenzo

Tlorenzo
  • Full Members
  • 34 posts

Posted 17 April 2013 - 12:32

Hallo Leute,

 

ich möchte während der Installation prüfen ob auf dem Zielsystem bereits ein bestimmtes Verzeichnis existiert. Falls ja soll die Installation einen anderen Ablauf ausführen.

 

Mein Projekt beinhaltet zwei Features (A, B ). Die Features werden jeweils in das Installationsverzeichnis  %installdir%\A bzw. %installdir%\B entpackt.

 

Sobald Feature A ausgewählt wurde, möchte ich bei der Installation prüfen ob das Verzeichnis %installdir%\A bereits existiert. Falls ja, soll das Verzeichnis vollständig gelöscht werden. Erst danach soll die Installation erfolgen (s. Ablaufdiagramm im Anhang).

 

if ExistsDir ( INSTALLDIR+"A")=0 then
	DeleteDir ( INSTALLDIR+"A" , ALLCONTENTS );
endif;	

 

Das Löschen funktioniert bereits, nur weiß ich nicht wie oder wo ich die Suche bzw. auch die Abhängigkeit zur Feature-Auswahl einbauen muss.

 

Wie kann ich das anstellen bzw. wo hänge ich die CA entsprechend ein?

 

Zunächst wollte ich hierfür eine "System Search" verwenden. Das zu suchende Verzeichnis befindet sich relativ zu meinem INSTALLDIR. Nach einigen Versuchen und der Suche hier habe ich das Vorhaben verworfen. Offenbar kann eine Systemsuche nicht mit dem INSTALLDIR ausgeführt werden.

 

Danke bereits im Voraus!

Attached Images

  • Demo.JPG

Edited by Tlorenzo, 17 April 2013 - 13:26.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 17 April 2013 - 14:52

Welches Problem versuchst du zu lösen? Es ist eine heikle Frage, wann du das Verzeichnis löschen sollst. Die erforderlichen Rechte hat das Setup normalerweise nur zwischen InstallInitialize und InstallFinalize (Custom Action mit Ausführung als Deferred in System Context). Problem ist aber, dass bereits vorher, nämlich bei InstallValidate entschieden wird, welche Dateien installiert werden sollen. Wenn also im Zielverzeichnis bereits eine Datei vorhanden ist und laut File Versioning Rules nicht überschrieben werden darf, dann fehlt die hinterher.

Theoretisch geht's auch ohne Custom Action. Du kannst im Direct Editor in der Tabelle RemoveFile einen Eintrag machen, um den Verzeichnisinhalt zu löschen. Wird aber auch nach InstallValidate ausgeführt, hat also das gleiche Problem.



Tlorenzo

Tlorenzo
  • Full Members
  • 34 posts

Posted 17 April 2013 - 14:56

Hallo Stefan,

 

meine Installer besitzen keine Update-Funktion.

 

Nun möchte ich einen neuen Installer erstellen, der mir Feature A und Feature B installiert. Feature A könnte auf dem Zielsystem aber noch von einem früheren Installer vorhanden sein. Nun möchte ich gewährleisten, dass hier keine Mischkultur auf alten und neuen Dateien entsteht.

 

Aus diesem Grund möchte ich prüfen ob das Verzeichnis bereits existiert, bevor ich Feature A installiere, um ggf. das alte Verzeichnis zu entfernen.

 

Ist es jetzt verständlicher? :rolleyes:

 

 



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 17 April 2013 - 15:21

Ja.

Grundsätzlich gelten die Datei-Überschreib-Regeln zwar auch, wenn eine Datei schon vorhanden ist weil sie von einem alten Installer dorthin kopiert wurde. Es ist aber nur ein Problem, wenn die vorhandene Datei nicht überschireben werden würde, also wenn du z.B. im neuen Setup eine ältere DLL installieren willst. Das ist wahrscheinlich nicht der Fall.

Deshalb würde ich es mit der RemoveFile Tabelle versuchen.



Tlorenzo

Tlorenzo
  • Full Members
  • 34 posts

Posted 13 May 2013 - 09:25

Ja.

Grundsätzlich gelten die Datei-Überschreib-Regeln zwar auch, wenn eine Datei schon vorhanden ist weil sie von einem alten Installer dorthin kopiert wurde. Es ist aber nur ein Problem, wenn die vorhandene Datei nicht überschireben werden würde, also wenn du z.B. im neuen Setup eine ältere DLL installieren willst. Das ist wahrscheinlich nicht der Fall.

Deshalb würde ich es mit der RemoveFile Tabelle versuchen.

 

Ich besitze eher das Problem, dass das alte Feature Dateien beinhaltet, die im neuen nicht mehr benötigt werden bzw. zu Problemen führen könnten. Aus diesem Grund ist die Überschreib-Regel leider keine Lösung.

 

Was meinst du mit der RemoveFile Tabelle? Hast du dazu evtl. ein Beispiel?

 

Letztendlich will ich meine CA zum Löschen doch nur ausführen, sofern ein bestimmtes Feature im Setup ausgewählt wurde. Lässt sich das nicht einfach im CA-Dialog prüfen oder kann ich die Feature-Auswahl in einem Skript auslesen?


Edited by Tlorenzo, 13 May 2013 - 09:25.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 13 May 2013 - 14:21

Wenn du es mit den eingebauten Mitteln machst, ist dein Setup nicht nur "sauberer", sondern du musst dir auch keine Sorgen machen um Dinge wie Berechtigungen (Achtung Benutzerkontensteuerung) oder Rollback (wiederherstellen der gelösten Dateien wenn das Setup abbricht). Die Tabelle RemoveFile findet du im Direct Editor, was eingetragen werden muss ist in der Doku beschrieben.

 

Wenn du es dennoch per Custom Action machen willst, hilft dir bei den Bedingungen bestimmt dieses "Cheat Sheet": https://www.flexeras...-Conditions.pdf



Tlorenzo

Tlorenzo
  • Full Members
  • 34 posts

Posted 19 June 2013 - 10:03

Hallo Stefan,

 

da ich mit dem DirectEditor nicht klar kommen, habe ich es nun mal über CA und Installscript probiert.

 

Mein Installscript funktioniert. Die Verzeichnisse werden wie gewünscht entfernt. Mein Problem ist nun jedoch, dass die CA zu spät ausgeführt wird. Das Installscript zum Löschen der Verzeichnisse wird erst ausgeführt, nach dem durch das Setup bereits alle Daten installiert wurden.

 

Für die CA habe ich folgende Option ausgewählt:

  • Return Processing: Asynchronous (Waits for exit code)
  • In-Script Execution: Immediate Execution
  • Execution Scheduling: Always Execute
  • Install Exec Sequence: After InstallInitialize

Wenn ich bei In-Script Execution "Derreferd Exectuion" auswähle, wird meine Script nicht ausgeführt.

 

Ich möchte die CA ausführen bevor die ersten Dateien durch das Setup auf dem System installiert werden.

 

Wo liegt hier der Fehler?



Tlorenzo

Tlorenzo
  • Full Members
  • 34 posts

Posted 19 June 2013 - 10:14

Ups... hab den Fehler gefunden.

 

Der Fehler lag an der asynchronen Ausführung. Nach dem ich den Wert "Return Processing" auf Synchronous umgestellt habe, funktioniert alles wie gewünscht.