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

INSTALLDIR erweitern mit einer Variable?


10 replies to this topic

tumbop

tumbop
  • Full Members
  • 6 posts

Posted 07 February 2013 - 11:04

Hallo Zusammen

Seit einiger Zeit Versuche ich eine Möglichkeit den INSTALLDIR Pfad bei der Installation zu erweitern. Jedoch bis jetzt war der Versuch erfolglos.

Was ich möchte:

Der MSI INSTALLDIR sollte so aussehen "C:\Program Files\Applikation %TYPE% %VERSION%"

TYPE & VERSION sollten den Standardwert "" haben.

Bei der Installation würde ich diese Werte per Befehl bestimmen
z.B.: "msiexec /i MSIFILE.msi TYPE=TEST VERSION=1.2.3 /qn"
Sodas der INSTALLDIR auf "C:\Program Files\Applikation TEST 1.2.3" zeigen sollte.

Ich weis das man den kompletten INSTALLDIR Pfad ersetzen kann, jedoch suche ich eine Lösung mit einsetzbaren Variablen.

Ist dies möglich und wenn ja, wie?

Danke


ali

ali
  • Full Members
  • 1,008 posts

Posted 08 February 2013 - 10:33

Hallo,
wäre es dann nicht am einfachsten gleich den ganzen Pfad über den Aufruf zu übergeben, also:
msiexec /i MSIFILE.msi INSTALLDIR="C:\Program Files\Applikation TEST 1.2.3" /qn

Das was du vorhast geht schon ist aber um einiges aufwändiger?!

tumbop

tumbop
  • Full Members
  • 6 posts

Posted 08 February 2013 - 11:25

Hallo

Ja dies währe schon einfacher, jedoch muss ich eine Lösung mit diesen Variablen erstellen.

Kannst du mir einen Tipp geben wie ich dies umsetzen könnte? Auch wenn es sehr aufwendig wäre...

ali

ali
  • Full Members
  • 1,008 posts

Posted 08 February 2013 - 13:04

also ich werds mal angehen.

als erstes müsstest du im Property-Manager drei neue Propertys anlegen zb.
MY_TYPE, MY_VERSION udn MY_DIRECTORY. Die Properties müssen GROß geschrieben werden, damit diese öffentlich sind.

Dann benötigst du noch eine Custom Action Type 51 (New Set Property)

Property Name = MY_DIRECTORY
Property Value = Application [MY_TYPE] [MY_VERSION]
Bedingung = Not Installed AND (MY_TYPE OR MY_VERSION)
Diese Cutom Action fügst du in der Execute Sequenz nach InstallFinalize ein.

Dann benötigst du noch eine Custom Action Type 35 (New Set Directory)

Property Name = INSTALLDIR
Property Value = [INSTALLDIR][MY_DIRECTORY]
Bedingung = Not Installed AND MY_DIRECTORY

Diese Cutom Action fügst du in der Execute Sequenz nach InstallInitialize ein.

Bei diesem Vorgang wird an dein Installdir Das letzte Verzeichnis angehängt. Die 2 CA's sind notwendig, weil wenn du hergehst und die beiden Propertys [MY_TYPE] und [MY_VERSION] direkt an das Installdir hängen würdes, dann würde diese Aktion ein "\" einfügen.

Wenn du die beiden Propertys aber direkt an den bestehenden Pfad mit Application anhängen willst, dann müsstest du das Installdir erst mal in das Property [MY_DIRECTORY] per CA 51 speichern, dann per Installscript aus dem Property MY_DIRECTORY] das "\" mit RemoveLastSlash abscheiden und am besten auch gleich im Script die beiden Propertys [MY_TYPE] und [MY_VERSION] anhängen und diese dann mit oben bechriebener CA35 setzen, oder eben auch im Script.

Edited by ali, 08 February 2013 - 13:05.


tumbop

tumbop
  • Full Members
  • 6 posts

Posted 13 February 2013 - 16:24

Hallo ali

Danke für deine Antwort

Ich weis nicht was ich Falsch mache, habe die beiden CA's exakt so eingefügt und die dazugehörigen Propertys erstellt, jedoch ohne irgend ein Ergebniss.
Probe schon seit über einer Woche an diesem Problem.

Irgendwie werden meine Werte die ich beim Installieren mitgebe, nicht übernohmen.
Müsste ich dies in einem Script noch definieren?

ali

ali
  • Full Members
  • 1,008 posts

Posted 13 February 2013 - 16:29

hi, hast du die CA's auch in die Execute Sequenz eingebunden (unter "Installation"), wenn ja nimm für einen Test mal die Bedingungen raus.
Am, besten lässt du ein Log mitlaufen und schaust da rein, was die Properties für Werte bekommen.
/L*V %TEMP%\MyMsi.log sollte ins UserTmp schreiben.

Edited by ali, 13 February 2013 - 16:32.


tumbop

tumbop
  • Full Members
  • 6 posts

Posted 15 February 2013 - 15:58

Habe den Fehler gefunden.
Die CA51 muss nicht nach "InstallFinalize" sondern nach "InstallInitialize"
und CA35 direkt nach CA51 augeführt werden.
So sieht mein Installationspfad so aus: "C:\Program Files\Applikation\MY_TYPE MY_VERSION".

Um jetzt noch den "\" Zwischen Applikation und den Variablen zu entfernen, habe ich ein Installscript Custom Action erstellt.
Und unter InstallScript diese Funktion erfasst. Jedoch kann ich nun keinen Build mehr erstellen?

ali

ali
  • Full Members
  • 1,008 posts

Posted 15 February 2013 - 18:55

Die CA51 muss nicht nach "InstallFinalize" sondern nach "InstallInitialize"
Nach InstallFinalze ist ja auch alles vorbei, wichtig ist, das die CA35 nach InstallInitialize kommt, da diese im (während der Laufzeit erzeugten) Script ausgeführt wird,dieses Script wird ab InstallInitialize abgearbeitet. die CA51 muss vorher kommen, vor InstallInitialize, da diese ja das Verzeichnissetzen vorbereitet.

Wieso kannst du kein Build erzeugen, was kommt für eine Fehlermeldung?

Edited by ali, 15 February 2013 - 19:07.


tumbop

tumbop
  • Full Members
  • 6 posts

Posted 19 February 2013 - 15:14

Ich habe folgenden Script zusammengewürfelt und auch erfolgreich compiliert:
CODE

export prototype MyFunction(HWND);
function MyFunction(hMSI)
STRING tmpINSTALLDIR;
STRING svInstalldir[256];
NUMBER nBuffer;
begin
 tmpINSTALLDIR = INSTALLDIR;
 nBuffer = 256;
 StrRemoveLastSlash(tmpINSTALLDIR);
 MsiSetProperty(ISMSI_HANDLE,'INSTALLDIR',tmpINSTALLDIR);
end;


Wenn ich jedoch eine CA65536 (InstallScript) erstelle und auf diese Funktion verweise, bekomm ich ständig folgende 3 Fehler:

C:\Projektordner\Script Files\Setup.rul : fatal error F8504 Can't open .obs output file
There were errors compiling InstallScript - Error Code:4370
An error occured streaming ISSetup.ddl support file C:\Projektordner\Script Files\Setup.inx - Error Code:7132

ali

ali
  • Full Members
  • 1,008 posts

Posted 19 February 2013 - 15:55

hm, hört sich so an als ob da was ReadOnly wäre. Arbeitest du zufällig mit einer Quellcode Verwaltung (VSS,TFS) und hast was nicht ausgecheckt?

tumbop

tumbop
  • Full Members
  • 6 posts

Posted 20 February 2013 - 11:14

So Problem gelöst und Paket endlich erstellt! cool.gif
Das Problem war, InstallShield erstellt den Ordner: Projektordner\"Script Files" und setzt diesen als schreibgeschützt.
Einfach Schreibschutz aufheben und gut ist.
ABER: Nach jedem Build wird der Schreibschutz wieder automatisch gesetzt was etwas mühsam ist.

Danke für die Hilfe!

Edited by tumbop, 20 February 2013 - 11:15.