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

Variable als Zielpfad


13 replies to this topic

leopard_xl

leopard_xl
  • Full Members
  • 2 posts

Posted 18 January 2012 - 15:22

Hallo Leute,

ich sitze nun schon seit Stunden über diesem Problem, hab hunderte von Lösungsmöglichkeiten gelesen und getestet bis die Finger qualmen. Leider bisher alles ohne Erfolg.

Meine Aufgabenstellung ist eine recht einfache, die scheint's schwer umzusetzen ist:

Ich möchte der MSI eine Variable mitgeben, entweder als Parameter (also Property) oder per Umgebungsvariable.
Diese Variable soll die MSI dazu nutzen die Files an einen bestimmten Pfad zu installieren.

Beispiel: Meine Variable lautet auf SERVER01 und die Files sollen dann gespeichert werden in [CommonAppDataFolder]Pfad\zur\Variable\SERVER01

Bisher hab ich mich mit Pfad Variablen, Umgebungsvariablen und Common Actions zum setzen von Properties gespielt. Aber nichts will gelingen.

Vielleicht kann mir jemand einen Denkanstoß geben?


LG

PS: Ich arbeite mit Installshield 2011, das Projekt ist ein Basic MSI

ali

ali
  • Full Members
  • 1,008 posts

Posted 19 January 2012 - 11:19

QUOTE
Ich möchte der MSI eine Variable mitgeben, entweder als Parameter (also Property) oder per Umgebungsvariable.
Diese Variable soll die MSI dazu nutzen die Files an einen bestimmten Pfad zu installieren.[/

Wie meinst du das? Für eine Silent-Installation, oder als vordefiniert Pfad für die Dialogsequenz?
Standardproperty für das Zielverzeichnis ist INSTALLDIR. Wenn du INSTALLDIR auf deinen gewünschten Zielpfad setzt, werden deine Dateien dort hin installiert.

Ein selbst erstelltes "RootDirectoryProperty" (also quasi ein ersatz für INSTALLDIR) muss in der Directory Table stehen und dort mit TargetDir" verknüpft sein, dies erreichst du, wenn du deine Verzeichnisse über "Application Data" -> "Files and Folders" erstellst. Dort kannst du dann auch Unterordner erstellen. Hier wird auch im Verzeichnis unter Eigneschaften der Name für dein Property vergeben. Wenn du beim Ausführen des Setup über die Dialoge das Verzeichnis wechseln willst, dann musst du in deinem hierfür erstellten Dialog noch ein SetTargetDir auf dein Property einbauen.

Ich würde aber an deiner Stelle erst mal versuchen alles durch setzen von INSTALLDIR zum laufen zu bringen, un dmich evtl. dann an die selbst erzeugten Property "heranpirschen".
viel Erfolg.

Edited by ali, 19 January 2012 - 11:23.


leopard_xl

leopard_xl
  • Full Members
  • 2 posts

Posted 19 January 2012 - 13:41

Danke erstmal für die Antwort. Das ganze ist als Silent-, nicht als Dialog-Installation angedacht, weil das Programm automatisiert per Softwareverteilung kommt.

Die MSI soll an mehreren Standorten verwendet werden, in jedem Standort gibt es einen Server für denselben Zweck aber mit anderem Namen. Ich benenne sie hier mal mit SERVER1, SERVER2 und SERVER3.

Die MSI soll bei der Installation der Dateien diese an einen Pfad kopieren:

C:\ProgramData\Anwendung\Dateien\<SERVER1> für den Server am Standort1
C:\ProgramData\Anwendung\Dateien\<SERVER2> für den Server am Standort2
C:\ProgramData\Anwendung\Dateien\<SERVER3> für den Server am Standort3

Die Umgebungsvariable %SERVER% wird per Script gesetzt.

Hoffe die Erklärung war nu etwas deutlicher und das kann man irgendwie umsetzen?

ali

ali
  • Full Members
  • 1,008 posts

Posted 20 January 2012 - 12:54

ok, also die Umgebungsvariable könntest du ja auslesen indem du diese über die Systemsuche im Projekt aus der Registry ausliest. Das wäre zb. für ein Systemvariable in der Registry unter:
HKLM\System\CurrentControlSet\Control\SessionManager\Enviroment dort die Variable auslesen und zb. in TMPPATH speichern. Dies kannst du alles über die Funktion "System Search" -> "Folderpath as specified by a registry entry" erledigen.

unter "Files and Folders" einden Ordner anlegen. Mit dem Property dieses Ordners (siehe Eigenschaften) sollten deine zu installierenden Komponenten verknüpft sein. Du kannst auch Unterordner erstellen, für das weiter vorgehen nimm aber den zuerst angelegten Ordner.

Als nächstes unter "Custom Action" eine CA NR. 35 "Set a directory" anlegen:
DirectoryName = Das Property des zuerst erstellten Ordner aus "Files and Folders"
Property = [CommonAppDataFolder][TMPPATH]
Bedingung = TMPPATH

Die CA in den Sequenzen nach InstallInitialize einfügen.

Das sollte eigentlich funktionieren, ich hoffe ich habe nix vergessen.

PS: Du kannst in deiner Variable auch den absoluten Pfad mitgeben, dann musst du die CA nur auf TEMPATH setzen, und das Property[CommonAppDataFolder] weglassen.

Edited by ali, 20 January 2012 - 12:57.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 26 January 2012 - 15:23

Zum Auslesen einer Umgebungsvariable musst du nicht die Systemsuche und die Registry bemühen. Einfach [%SERVER] reicht.
Und dann per custom Action Typ 51 (Property setzen) das Zielverzeichnis entsprechend setzen - allerdings vor CostInitialize.

ali

ali
  • Full Members
  • 1,008 posts

Posted 27 January 2012 - 10:13

QUOTE
Und dann per custom Action Typ 51 (Property setzen) das Zielverzeichnis entsprechend setzen - allerdings vor CostInitialize


hm, werden da die Properties der Untervezeichnisse mit umgesetzt?
Ich meine ich hätte hier vor kurzem gerade da Problem mit dem Maintenance Mode gehabt, das diese Properies hier nur über "Directory setzen" CA35 mit umgesetzt werden.

Edited by ali, 27 January 2012 - 10:13.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 27 January 2012 - 10:34

Wenn du das vor CostInitialize machst, müsste es sich auch auf die Unterverzeichnisse auswirken, denn die werden ja erst während des Costing ermittelt.

Juergen Wagener

Juergen Wagener
  • Full Members
  • 32 posts

Posted 29 May 2012 - 11:28

Hallo,

ich werde aus den gegebenen Antworten nicht so recht schlau. Kann ich den Inhalt einer Variable nicht einfach als Ordner-Namen übergeben?

Bei Registry-Werten geht das. Ich frage per CA-Script einen Wert ab und übergebe ihn dann am Ende des Scripts z.B. mit

Session.Property("OFFICEVERSION") = "12.0"

Der entsprechende Registry-Pfad sieht so aus:

HKEY_CURRENT_USER\Software\Microsoft\Office\[OFFICEVERSION]\PowerPoint\AddIns

Bei der Installation wird für [OFFICEVERSION] dann korrekt 12.0 eingetragen.

Dasselbe soll jetzt auch bei einem Dateipfad gemacht werden. Wenn ich aber z.B.
[INSTALLDIR][OFFICEVERSION] als Pfad angebe, wird [OFFICEVERSION] nicht aufgelöst sondern direkt so als Ordnername gesetzt.

Wo liegt der Fehler?

Edited by Juergen Wagener, 01 June 2012 - 07:58.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 29 May 2012 - 19:53

Das liegt daran, dass die Verzeichnis-Hierarchie anders aufgebaut wird. Schau dir mal die Tabelle "Directory" an (im Direct Editor oder in der Doku), ich denke, dann wird es klar warum es nicht so geht.

Juergen Wagener

Juergen Wagener
  • Full Members
  • 32 posts

Posted 30 May 2012 - 13:03

Kannst du bitte nochmal kurz die nötigen Schritte skizzieren? Ausgangspunkt ist der Rückgabewert des CA-Scripts (eingetragen in der exe-Sequenz "After AppSearch"), z.B. 11.0 oder 14.0,

Der neue Ordner soll den Namen dieses Rückgabewertes erhalten. In der Struktur dann z.B. c:\programme\microsoft\office\14.0\powerpoint wobei c:\programme\microsoft\office der INSTALLPATH ist.

Muss ich das dann über ein Property 35 oder 51 machen? Ich kann die Posts vom 20.1 und 26.1 irgendwie nicht zusammenbringen.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 30 May 2012 - 13:24

Ich empfehle eine CA vom Typ "Set a property" (Typ 51). Das zu setzende Property ist das Verzeichnisproperty, in das die Datei installiert werden soll, ich nenne es mal PLUGINDIR. Der Wert auf den es gesetzt wird, ist:
[INSTALLPATH][OFFICEVER]\powerpoint
wobei OFFICEVER z.B. 14.0 ist. Ob zwischen [INSTALLPATH] und [OFFICEVER] ein \ muss, hängt davon ab, ob INSTALLPATH am Ende schon einen hat oder nicht.
Diese CA muss nun in der InstallUISequence und in der InstallExecuteSequence eingefügt werden, und zwar irgendwo vor CostFinalize, ich empfehle vor CostInitialize oder weiter vorn (auf jeden Fall aber nach AppSearch, denn erst dann hast du OFFICEVER).
Jetzt würde ich noch als Bedingung OFFICEVER angeben. Damit ist sichergestellt, dass die Aktion nicht ausgeführt wird, wenn OFFICEVER leer ist. Ggf. sollte die Bedingung auch INSTALLPATH And OFFICEVER lauten, damit keines der beiden leer ist. Andernfalls bekommst du einen ungültigen Pfad und das Setup bricht beim Costing ab.

Typ 35 brauchst du dagegen, wenn du das ganze erst nach CostFinalize machst, wenn also z.B. eine Benutzereingabe verwendet werden soll (die Dialoge werden erst nach CostFianlize angezeigt).

Juergen Wagener

Juergen Wagener
  • Full Members
  • 32 posts

Posted 31 May 2012 - 10:03

Danke erstmal für die Antwort.

Wenn ein Eintrag in der InstallUISequence erfolgen soll, dann habe ich das Problem, dass das CA-Script zur Ermittlung der Versionsnummer zu der Zeit noch gar nicht gelaufen ist. Das wird wie gesagt erst in der exe-Sequenz "After AppSearch" ausgeführt.

Die andere Sache ist die Verknüpfung der CA 51 mit dem Dateisystem. Den Ordner mit Unterordnern habe ich angelegt und der Ordner, bei dem der Name variabel sein soll, hat dort hat ja einen Namen. Das dumme ist nur, dass nach der Ausführung immer dieser Name in der Ordnerstruktur erscheint und nicht der variable Name. Welcher Wert in den Properties des Ordners muss denn wie mit der CA 51 verknüpft werden?

Ist alles nicht ganz so einfach...

Edited by Juergen Wagener, 31 May 2012 - 10:06.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 31 May 2012 - 11:38

Kannst du das Skript nicht zusätzlich in die UI Sequenz nehmen? Andernfalls musst du zur Not eben doch Typ 35 nehmen und nach CostFinalize aufrufen.

Der Name des Verzeichnisproperties wird in der Komponenten-Ansicht in geschweiften Klammern angezeigt. Dieses Property muss die CA setzen (ohne geschweifte Klammern natürlich).

Juergen Wagener

Juergen Wagener
  • Full Members
  • 32 posts

Posted 01 June 2012 - 07:06

Das waren die letzten entscheidenden Tips. Hat jetzt mit Typ 51 geklappt.
Besten Dank für deine Hilfe.