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

Installscript, Property und Installpfad setzen


18 replies to this topic

Sanchooo187

Sanchooo187
  • Full Members
  • 19 posts

Posted 05 March 2008 - 11:13

Hallo,

in einem Projekt habe ich einen Installscript laufen, dass mir die Microsoft Word Version und den Start-Up Pfad liefert. Diese werden mit "MsiSetProperty" in einer Eigenschaft gespeichert. Jetzt möchte ich bei der Installation die Eigenschaft für den Start-Up-Pfad als Installationspfad für eine bestimmte Datei nutzen.
Für die anderen Programmteile benutze ich INSTALLDIR. Wie kann ich während der Laufzeit diese Eigenschaft als (Teil)Installationspfad nutzen?

Hier nochmal zur Veranschaulichung:

[INSTALLDIR]\Datei 1
[INSTALLDIR]\Datei 2
[INSTALLDIR]\Datei 3
[Word-Start-Up-Pfad]\Datei 4

Danke im voraus

ali

ali
  • Full Members
  • 1,008 posts

Posted 05 March 2008 - 12:15

QUOTE
in einem Projekt habe ich einen Installscript laufen, dass mir die Microsoft Word Version und den Start-Up Pfad liefert


diese Aktion kannst du dir sparen und alles auf einen Schlag über die Ansicht "Systemsuche" in IS erledigen. Dort kannst du den Pfad zu Word in der Reg auslesen und diesen Wert gleich an ein Verzeichnisproperty übergeben.

Edited by ali, 05 March 2008 - 12:19.


Sanchooo187

Sanchooo187
  • Full Members
  • 19 posts

Posted 05 March 2008 - 13:13

QUOTE (ali @ 2008-03-05 12:15)
QUOTE
in einem Projekt habe ich einen Installscript laufen, dass mir die Microsoft Word Version und den Start-Up Pfad liefert


diese Aktion kannst du dir sparen und alles auf einen Schlag über die Ansicht "Systemsuche" in IS erledigen. Dort kannst du den Pfad zu Word in der Reg auslesen und diesen Wert gleich an ein Verzeichnisproperty übergeben.

Gibt es einen Registryeintrag mit dem ich sofort weiß welches Word installiert ist?
Ich teste auf "HKLM\SOFTWARE\Microsoft\Office\[9.0|10.0|11.0|12.0]\Word\InstallRoot" und benutze eine bool Variable.

Wie und in welcher Art kann ich eine Property als "Ordner des Zielcomputers" verwenden? Es gibt ja z.B. [INSTALLDIR] oder [AppDataFolder], die dann beim Zielsystem dementsprechend aufgelöst werden.

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 05 March 2008 - 13:20

Du kannst eigene Ordner anlegen.

Sanchooo187

Sanchooo187
  • Full Members
  • 19 posts

Posted 05 March 2008 - 13:24

QUOTE (Stefan Krueger @ 2008-03-05 13:20)
Du kannst eigene Ordner anlegen.

Ja klar, aber ich weiss vor der Installation nicht, welches Verzeichnis betroffen ist, das weiss ich erst während der Installation über das Property das gesetzt wird.

ali

ali
  • Full Members
  • 1,008 posts

Posted 05 March 2008 - 13:27

QUOTE
das weiss ich erst während der Installation über das Property das gesetzt wird.

...und genau dieses Property nimmst du als Ziel für den Pfad der als Speicherort von Word über die Systemsuche gefunden wurde.

Sanchooo187

Sanchooo187
  • Full Members
  • 19 posts

Posted 05 March 2008 - 13:59

QUOTE (ali @ 2008-03-05 13:27)
QUOTE
das weiss ich erst während der Installation über das Property das gesetzt wird.

...und genau dieses Property nimmst du als Ziel für den Pfad der als Speicherort von Word über die Systemsuche gefunden wurde.

Ok, muss ich irgendwelche Konventionen (z.B. Property in eckige Klammer) beachten oder kann ich einfach einen Ordner anlegen, dass den Namen der Property hat?

Kann man Bedingungen benutzen mit der Systemsuche?

Beispiel hierfür:

Word hat ja einen Start-Up-Pfad, dieser muss nicht zwingend unter [AppDataFolder]Microsoft\Word\Startup liegen, sondern kann gegebenenfalls auch aus HKEY_CURRENT_USERHKEY_CURRENT_USER\Software\Microsoft\Office\[Versionsnummer]\Word\Options\STARTUP-PATH bezogen werden.

Wie kombiniere ich das mit der Systemsuche?

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 05 March 2008 - 14:02

InstallShield legt automatisch ein Property (eigentlich einen Directory Table Eintrag) an, wenn du einen neuen Ordner anlegst. Dieses Property musst du dann auf den entsprechenden Wert setzen. er von dir angegebene Ordnername wird dann nur als Default-Wert verwendet, wenn bzw. so lange er nicht aus der Registry-Suche gesetzt wurde.

Sanchooo187

Sanchooo187
  • Full Members
  • 19 posts

Posted 05 March 2008 - 15:04

Zunächst mal entschuldige ich mich für meine Inkompetenz.

Irgendwie verwirrt mich das ganze, weshalb ich es nicht hinbekomme.

Ich benutze weiterhin das kleine Installscript, womit ich auf einfache Weise die Word-Version und den StartUp-Pfad herausfinde.
Diese setze ich mit folgender Funktion in eine Property:
CODE

MsiSetProperty (ISMSI_HANDLE, WORDSTARTUPPATH, sDirWordStart);
MsiSetProperty (ISMSI_HANDLE, WORDVERSION, sWordVersion);

Dieses Installscript wird per Benutzerdefinierte Aktion ausgeführt, was auch scheinbar richtig funktioniert.
Jetzt möchte ich die den Wert der Eigenschaft WORDSTARTUPPATH als Installationspfad auf dem Zielrechner für meine Datei nutzen.
Wie bewerkstellige ich das?

Hier mal noch ein Bild zur Veranschaulichung:
user posted image

Irgendwie stehe ich auf dem Schlauch.

Edited by Sanchooo187, 05 March 2008 - 15:27.


ali

ali
  • Full Members
  • 1,008 posts

Posted 05 March 2008 - 15:23

Ist auch gar nicht so einfach, also nicht verzweifeln.
Im übrigen ist das was du dort machst zwar auch ein Weg, aber du würdest dir halb so weh tun wenn du das alles über die Systemsuche erledigst, ich schätze mal 2 min Aufwand.

Systemsuch -> Hinzufügen -> "Ordnerpfad wie von einem RegEintrag angegeben" -> RegInfos eingeben -> Wert als Eigenschaft speichern ODER Ziel einer Komponente.

fertig.

Bei deinem jetzigen Problem würde ich das Verzeichnis hier einmal löschen, und dies manuell im Direct Editor unter Directorys anlegen, dann erscheint dir das Verzeichnis im Dateien Dialog als [XYZ] also in Klammern, wenn dieses Verzeichnis mit einer Komponente verküpft ist.
im Script musst du das dann glaube ich mit SetTargetPath setzen.

Edited by ali, 05 March 2008 - 15:24.


Sanchooo187

Sanchooo187
  • Full Members
  • 19 posts

Posted 05 March 2008 - 15:30

QUOTE (ali @ 2008-03-05 15:23)
Ist auch gar nicht so einfach, also nicht verzweifeln.
Im übrigen ist das was du dort machst zwar auch ein Weg, aber du würdest dir halb so weh tun wenn du das alles über die Systemsuche erledigst, ich schätze mal 2 min Aufwand.

Systemsuch -> Hinzufügen -> "Ordnerpfad wie von einem RegEintrag angegeben" -> RegInfos eingeben -> Wert als Eigenschaft speichern ODER Ziel einer Komponente.

fertig.

Bei deinem jetzigen Problem würde ich das Verzeichnis hier einmal löschen, und dies manuell im Direct Editor unter Directorys anlegen, dann erscheint dir das Verzeichnis im Dateien Dialog als [XYZ] also in Klammern, wenn dieses Verzeichnis mit einer Komponente verküpft ist.
im Script musst du das dann glaube ich mit SetTargetPath setzen.

Ich würde schon gerne die Systemsuche verwenden, allerdings weiss ich nicht wie ich da Bedingungen einbauen kann.
Kann ich dir das Script mal schicken und du sagst mir dann wie ich das 1 zu 1 in der Systemsuche umsetze?

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 05 March 2008 - 18:34

Wenn du den neuen Ordner angelegt hast (ich empfehle als Default irgendwas sinnvolles unterhalb von INSTALLDIR) machst du einen Rechtsklick auf den Ordner > Properties. In Dialog wird der Directory Identifier angezeigt. Den kannst du auf WORDSTARTUPPATH umbenennen wenn du willst. Jedenfalls musst du diesen Identifier per MsiSetProperty setzen.
Wichtig ist noch, dass diese CDustom Action vor CostFinalize (ich empfehle vor CostInitialize) ausführst, und zwar sowohl in der UI als auch in der Execute Sequenz.
Den Direct Editor musst du dafür nicht bemühen.

Sanchooo187

Sanchooo187
  • Full Members
  • 19 posts

Posted 04 June 2008 - 14:02

Hallo,
ich muß das Thema wieder aufgreifen. Bisher mußte ich es auf Eis legen und hatte damals keine gescheite Lösung gefunden.

Ich habe vieles versucht, allerdings keines der Möglichkeiten hat funktioniert.

Folgendes ist Stand der Dinge:

Ich habe 6 Komponenten, davon werden 5 in INSTALLDIR installiert. Das 6. soll zur Laufzeit ermittelt werden. Für diese gibt es ein Defaultverzeichnis. Dieses sollte, wenn ein bestimmter Registryeintrag vorhanden ist, mit dessen Wert überschrieben werden.

Was habe ich gemacht?
Zuerst habe ich im Eigenschaftenfenster eine Eigenschaft "XYZ" mit dem Wert [AppDataFolder]Microsoft\Word\STARTUP angelegt.

Danach habe ich eine Systemsuche "Ordnerpfad, wie von einem Registrierungseintrag angegeben" erstellt. Im nächsten Schritt habe ich den Stamm, den Schlüssel und den Wert eingetragen. Danach habe ich bei "Wert in dieser Eigenschaft speichern" den Eigenschaftsnamen "XYZ" angegeben und die Option "Eigenschaft als Ziel für eine Komponente verwenden" aktiviert und die 6. Komponente ausgewählt.
Damit wäre die Systemsuche abgeschlossen.

Im Komponentenfenster wähle ich die 6. Komponente aus und muß dieser Komponente ein Ziel angeben. Hier müßte doch "XYZ" stehen oder nicht?
Wie gebe ich eine Eigenschaft als Zielpfad an?

Wenn ich es testen will kommt immer die Fehlermeldung: "The Directory entry 'AppDataFolder\Microsoft\Word\STARTUP' does not exist in the Directory table.

Auch den Weg über Benutzerdefinierte Aktionen -> Neu festgelegtes Verzeichnis habe ich probiert, leider ohne Erfolg.

Was mache ich falsch?

P.S.: Leider drängt so langsam die Zeit. Über eine Antwort würde ich mich sehr freuen.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 05 June 2008 - 13:06

Es ist nicht nötig, das Property im Eigenschaftenfenster anzulegen. Stattdessen gehört es in die Directory Tabelle. Das könnte man alles manuell machen, aber ich denke es ist am einfachsten wenn du es in anderer reihenfolge machst:

Gibt für die Komponente ein separates Zielverzeichnis an. InstallShied erzeugt dafür automatisch einen Directory-Eintrag. Dessen Name wird in geschweiften Klammern angegeben, wenn du in der Komponentenansicht den Pfad anklickst.

Diesen Eintrag musst du dann über die Systemsuche setzen.

Sanchooo187

Sanchooo187
  • Full Members
  • 19 posts

Posted 06 June 2008 - 14:06

QUOTE
Gibt für die Komponente ein separates Zielverzeichnis an. InstallShied erzeugt dafür automatisch einen Directory-Eintrag. Dessen Name wird in geschweiften Klammern angegeben, wenn du in der Komponentenansicht den Pfad anklickst.
Diesen Eintrag musst du dann über die Systemsuche setzen.


Ich werde langsam verrückt. Egal was ich mache es funktioniert nicht wie ich es möchte.
Ich möchte doch einfach nur einen Defaultverzeichnis, der mir vor der Laufzeit bekannt ist, setzen. Sobald die Systemsuche fündig wird, soll das Defaultverzeichnis durch das von der Systemsuche ermittelte Verzeichnis ersetzt werden. Wenn die Suche nicht erfolgreich ist, soll das Defaultverzeichnis beibehalten werden.

Entweder ich kann ein Defaultverzeichnis setzen und er bleibt fest. Oder sobald ich die Systemsuche aktiviere und der Komponente zuweise, erstellt das Programm in der Dateien und Ordner-Ansicht bei Ordner des Zielcomputers das Property, das von der Systemsuche gesetzt wird, als Verzeichnis und verschiebt die Datei vom Defaultverzeichnis dahin.

Ich versuche das mal anhand eines Beispiels zu erklären:
Ich lege in der Dateien und Ordner-Ansicht unter Ordner des Zielcomputers die folgenden Verzeichnisse an:

- Zielcomputer
-- [AppDataFolder]
--- Microsoft
---- Word
----- Startup
-> Das ist das Defaultverzeichnis für meine x.dot-Datei (Komponente 6)
-- [ProgramFilesFolder]
--- a
---- b
----- [INSTALLDIR]
-> Hier liegen alle anderen Dateien (alle anderen Komponenten)

Soweit so gut. Lege ich jetzt eine Systemsuche des Typs "Ordnerpfad, wie von einem Registrierungseintrag angegeben" an.
Abschließend gebe ich als Property WORDSTARTUPPATH an und aktiviere die Option "Eigenschaft als Ziel für eine Komponente verwenden" und gebe dort die Komponente 6 an.
Jetzt geschieht folgendes. Wenn ich die Dateien und Ordner-Ansicht auswähle, dann sieht es wie folgt aus:

- Zielcomputer
-- [AppDataFolder]
--- Microsoft
---- Word

-- [ProgramFilesFolder]
--- a
---- b
----- [INSTALLDIR]
-> Hier liegen alle anderen Dateien (alle anderen Komponenten)
-- WORDSTARTUPPATH
-> Die x.dot-Datei (Komponente 6) liegt jetzt hier

Er legt quasi die Property als Verzeichnis an und legt die Komponente 6 darunter. Das Verzeichnis Startup unter Word und x.dot darunter verschwinden.
Ich möchte aber das Defaultverzeichnis beibehalten und nur wenn die Systemsuche erfolgreich ist das Verzeichnis neu setzen.

Sorry, aber ich werde einfach nicht schlau daraus.

Edited by Sanchooo187, 06 June 2008 - 14:13.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 09 June 2008 - 18:47

Schau mal in die Directory Tabelle (im Direct Editor). Evtl. stimmt dort das Verzeichnis und es wird nur in der Baumansicht verwirrend dargestellt.

Sanchooo187

Sanchooo187
  • Full Members
  • 19 posts

Posted 10 June 2008 - 13:30

Ich hab jetzt ein neues Projekt angefangen.
QUOTE
Gibt für die Komponente ein separates Zielverzeichnis an. InstallShied erzeugt dafür automatisch einen Directory-Eintrag. Dessen Name wird in geschweiften Klammern angegeben, wenn du in der Komponentenansicht den Pfad anklickst.


Habe ich.
Bei Komponenten-Ziel steht jetzt -> {STARTUP}[AppDataFolder]Microsoft\Word\Startup

Direct Editor/Directory:

Directory - Directory Parent - DefaultDir
-----------------------------------------------
MICROSOFT - AppDataFolder - MICROS~1|Microsoft
WORD - MICROSOFT - Word
STARTUP - WORD - Startup

Soweit so gut, aber

QUOTE
Diesen Eintrag musst du dann über die Systemsuche setzen.


wie setze ich diesen Eintrag in die Systemsuche? Ich wähle ja "Ordnerpfad, wie von einem Registrierungseintrag angegeben", dort kann ich eine Eigenschaft auswählen und eine Komponente als Ziel markieren.
Was muß ich genau für diesen Eintrag angeben?

Irgendwie bin ich jetzt total verwirrt.

Edited by Sanchooo187, 10 June 2008 - 13:30.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 11 June 2008 - 14:10

Gibt es nicht dir Option "nur in Property speichern"? Dort kannst du STARTUP angeben.

Sanchooo187

Sanchooo187
  • Full Members
  • 19 posts

Posted 11 June 2008 - 15:15

Jetzt tut es, endlich. Vielen vielen Dank für die Hilfestellung.
Werde bestimmt noch genügend Fragen haben die nächste Zeit. biggrin.gif