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

Komponenten mit unterschiedlichen Zielpfaden


7 replies to this topic

dexter

dexter
  • Members
  • 14 posts

Posted 17 March 2005 - 12:03

Hallo Zusammen,

ich habe vor die Komponenten bzw. Features meines Setups mit unterschiedliche Zielpfaden zu installieren. Diese Zielpfade sollen von Benutzer definiert werden können.
z.B.:

Feature1 -> benutzerdefinierter Zielpfad 1
Feature2 -> benutzerdefinierter Zielpfad 2

Wie kann ich so was realisieren? Ich habe doch immer nur die vorgegebenen Variablen INSTALLDIR,PersonalFolder,WindowsFolder,etc... oder?

Danke


Sascha M.

Sascha M.
  • Full Members
  • 57 posts

Posted 17 March 2005 - 14:05

Hallo

Du musst unter Komponenten/Ziel einen neuen Directoryeintrag erstellen.
Dieser erscheint dann in der Tabelle Directorys. Nun bist Du in der Lage über Script den Pfad zu setzen, indem der Wert der Variable geändert wird.

Auslesen:
CODE

function STRING GetFeatureDestPath()
STRING szPath[256];
NUMBER nBuffer;
begin
nBuffer=256;
MsiGetTargetPath(ISMSI_HANDLE,DirectoryEntry, szPath,nBuffer);
return szPath;
end;

DirectoryEntry ist der angelegte Directoryeintrag.
Setzen:
CODE

FeatureSetTarget(MEDIA,DirectoryEntry,"C:\Progamme\...");


Gruß
Sascha

dexter

dexter
  • Members
  • 14 posts

Posted 17 March 2005 - 15:23

Hallo,

danke für die Antwort aber so ganz habe ich das nicht verstanden.

Ich frage zwei Zielpfade ab und speichere sie dann in zwei verschiedene Variablen:

CODE

Dlg_SdAskDMDestPath:
   szTitle = "Zielpfad1";
    szMsg   = "";
     nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );
     // INSTALLDIR = szDir;
     szZielpfad1 = szDir;
     if (nResult = BACK) goto Dlg_SetupType2;
   
Dlg_SdAskAVDestPath:
     szTitle = "Zielpfad1";
     szMsg   = "";
     nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );
     //INSTALLDIR = szDir;
     szZielpfad2 = szDir;
     if (nResult = BACK) goto Dlg_SdAskDMDestPath;


Anschiessend soll nun das Feature1 mit dem Zielpfad1 installiert werden und Feature2 mit dem Zielpfad2.

Mein Problem ist es dem Installationsprozess mit den entsprechenden Pfaden zu starten. Oder dem Komponenten der einzelen Features meine Variablen Zielpfad1 und Zielpfad2 zu zuweisen.

Danke

Sascha M.

Sascha M.
  • Full Members
  • 57 posts

Posted 18 March 2005 - 08:22

Du legst als erstes einen Verzeichniseintrag für die Komponenten unter Deinem Feature an. (siehe Bild) Auf durchsuchen, erstellen klicken.
Dieser Eintrag erscheint dann in der Listbox und somit kannst Du den Eintrag als Ziel für alle Komponenten unter dem Feature angeben.

Per Script musst Du jetzt nur den Wert des Verzeichniseintrages ändern:

CODE

Dlg_SdAskDMDestPath:
  szTitle = "Zielpfad1";
   szMsg   = "";
    nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );
    // INSTALLDIR = szDir;
    FeatureSetTarget(MEDIA,Verzeinisseintrag, szDir);
    szZielpfad1 = szDir;
    if (nResult = BACK) goto Dlg_SetupType2;


Hoffe es ist jetzt klarer geworden.

Attached Images

  • Sample.PNG

Edited by Sascha M., 18 March 2005 - 08:24.


dexter

dexter
  • Members
  • 14 posts

Posted 18 March 2005 - 14:05

Hi, vielen Dank für deine Antwort.

Doch leider habe ich noch ein Problem.

Ich habe den Verzeichniseintrag gesetzt. Anschiessend habe ich in meiner Funktion eine string Variable namens "Verzeichniseintrag" definiert. Da sonst der Compiler eine Fehlermeldung ausgibt.

CODE

string Verzeichniseintrag;

Dlg_SdAskDMDestPath:
 szTitle = "Zielpfad1";
  szMsg   = "";
   nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );
   // INSTALLDIR = szDir;
   FeatureSetTarget(MEDIA,Verzeinisseintrag, szDir);
   szZielpfad1 = szDir;
   if (nResult = BACK) goto Dlg_SetupType2;


Wenn ich das Setup ausführe bekomme ich einen Ausnahmefehler (String zugriff ausserhalb der Grenzen) genau an der Stelle an der ich
CODE
FeatureSetTarget(MEDIA,Verzeinisseintrag, szDir);
ausführe.
Ich dachte das wenn ich eine Verzeichniseintrg setzte, dass ich dann eine art globale Variable habe auf die ich im Script zugreiffen kann. Oder etwa nicht ?

Vielen Dank

Sascha M.

Sascha M.
  • Full Members
  • 57 posts

Posted 18 March 2005 - 14:17

Nein, die Verzeichnisvariable ist eine MSI Property, keine Script Variable!!!
So musst Du schreiben:
CODE

FeatureSetTarget(MEDIA,"Verzeinisseintrag", szDir);

Hatte mich vorhin etwas falsch ausgdrückt, da ich bei mir im Code eine Konstante hatte und einfach für das Beispiel rauskopiert hatte.

dexter

dexter
  • Members
  • 14 posts

Posted 18 March 2005 - 16:47

Super hat funktioniert!!

Aber wie es nun mal ist, jagt ein Problem das andere wink.gif

Unter Anwendungsdaten/Dateien und Ordner erstell ich nun eine etwas komplexere Verzeichnisstruktur. Installshield legt mir automatisch eine Reihe von Komponenten an und weisst diese einem Feature zu. Soweit in ordnung.

Problem 1: Unter Anwendungsdaten/Dateien und Ordner existiert Standardmässig das Verzeichnis Projektname [INSTALLDIR]. Was für Auswirkungen hat das auf die Zielvergabe zur Laufzeit? Den eigentlich soll es ja nicht [INSTALLDIR] sonder Zielpfad1 bzw. Zielpfad2 sein.

Problem 2: Alle Komponenten die automatisch angelegt werden haben nun den Zieleintrag: [INSTALLDIR]Verzeichnisname. Muss doch jetzt nicht für jede Komponente einen neuen Verzeichniseintrag setzten, oder? Es sollen einfach alle Komponenten die einem bestimmten Feature zugewiesen sind, unter einem bestimmten Zielpfad installiert werden. In der Hilfe habe ich gelesen das der Zieleintrag der Komponenten gegenüber dem Zieleintrag der Features priorisiert wird. Mit
CODE
FeatureSetTarget(MEDIA,Verzeinisseintrag, szDir);
setzten wir doch den Zielpfad für ein Feature. Was hat das eigentlich mit dem Zielpfad der Komponenten zu tun?

Irgendwie versteh ich jetzt die Zusammenhänge nicht mehr ganz.

Bei einen "Standard" Setup mit einem [INSTALLDIR] und einem Feature war das kein Problem.

Vielen Dank

Sascha M.

Sascha M.
  • Full Members
  • 57 posts

Posted 04 April 2005 - 09:32

Hallo!
Bei Problem eins würde ich nen kleines Testprojekt machen und einfach mal ausprobieren.

Installshield nimmt automatisch immer [INSTALLDIR], sobald eine neue Komponente hinzugefügt wird. Wenn Du bei allen Komponenten Deinen Zielpfad einträgst, sollte dann auch alles dort hin installiert werden. Du brauchst also nicht für jede Komponente einen neuen Verzeichnisseintrag zu machen.
Die Begriffe sind etwas wirr, mit FeatureSetTarget änderst Du einen Wert in der Directory-Tabelle. Dabei ist es egal, ob Feature oder Komponente. Könntest statt FeatureSetTarget auch MsiSetProperty verwenden. Hatte ich nur nicht erwähnt, damit die Verwirrung nicht so gross ist wink.gif

Ansonsten immer nen kleines Testprojekt erstellen und damit probieren!

Edited by Sascha M., 04 April 2005 - 09:32.