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

Installpfad aus Registry


18 replies to this topic

ApoX

ApoX
  • Full Members
  • 2 posts

Posted 10 November 2006 - 19:07

Hallo,

ich bin ein totaler Anfänger in Installshield und habe mir eine Testversion runtergeladen.
Nun versuche ich einen Installer zumachen, der den Installationspfad aus der Registry nimmt.

D.h. der Pfad ist schon vorher dort vorgegeben, bevor man auch nur irgendwas mit dem Installer installieren muss.

HKEY_Local_Machine/Software/Anbieter/Programm/-InstallDir als Schlüssel

Ist das denn möglich ? - bzw. wie ?

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 10 November 2006 - 19:51

Ich würde den Projekttype "Basic MSI" verwenden, nicht "InstallScript MSI". Dort kannst du über die Systemsuche Funktion einen Registry-Eintrag auslesen und dem INSTALLDIR zuweisen.

ApoX

ApoX
  • Full Members
  • 2 posts

Posted 11 November 2006 - 23:50

Hallo,

danke für die Antwort.

Ich hab jetzt bei "System Search" die suche nach dem REG_KEY veranlasst.
Aber wie kann ich nun den REG_KEY InstallDIR zuweisen ?

//EDIT: ok habs über Custom Actions bei Basic MSI geschafft smile.gif

Nun hätt ich aber eine andere Frage.
Wenn ich bei den Dialogen "keinen" Skin wähle, wie kann ich dann trozdem die Banner ändern ? Und welche größe müssen die dann haben?

Edited by ApoX, 12 November 2006 - 03:28.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 12 November 2006 - 19:58

QUOTE
Wenn ich bei den Dialogen "keinen" Skin wähle, wie kann ich dann trozdem die Banner ändern ?

Ja, entweder für jeden Dialg einzeln im Dialogeditor, oder für alle Dialoge indem du die Bitmap-resource in der Binärtabelle austauschst. Schau mal im Dialogeditor auf welche Resource das Bitmap Controlö verweist. dort (ein pafd im InstallSield verzeichnis) liegt die Statdard-Bitmap. Davon kannst du eine Kopie machen und schon hast du die richtige Größe.

BlaXta

BlaXta
  • Full Members
  • 8 posts

Posted 12 April 2007 - 15:01

Sorry wenn ich den alten Thread wieder ausgrabe, aber ich wollte kein neuen erstellen...

ich habe ein sehr ähnliches wenn nicht sogar gleiches Problem...
es geht darum, dass ich zuerst ein selbst erstelles build installiere, welches einen Pfad in einen StringValue in die registry schreibt.

Name dieses Strings ist: Template
der Wert ist: "C:\Dokumente und Einstellungen\All Users\Templates"...

nun soll ein 2. Programm installiert werden, welches diesen Pfad aus der registry liest, und in diesen Pfad dann neue Dateien hinzufügt (kundenspezifisch)..

das ganze habe ich mit dieser "System Search" methode probiert, jedoch weiß ich nicht ob bei "Registry Key" nur die ordnerstruktur reingeschrieben oder auch die ordnerstruktur + diesem StringValue?!

also:
SOFTWARE\FIRMA\PRODUKT\SW\Template
oder
SOFTWARE\FIRMA\PRODUKT\SW\

oder kommt bei "Registry Value" dieses Template rein?!

desweiteren weiß ich auch nicht, wie das mit dieser übergabe auf INSTALLDIR funzt... in Customer Actions habe ich schon geschaut, aber nix brauchbares gefunden ;(

vielen dank und mfg

Edited by BlaXta, 13 April 2007 - 12:28.


Snoopy87

Snoopy87
  • Full Members
  • 18 posts

Posted 13 April 2007 - 07:44

Hallo,
@BlaXta


wieso machst es nicht über das Skript?

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); /////Sollte vordefiniert werden auf das was du brauchst. Den Standard mässig wird er sonst immer in HKEY_CLASSES_ROOT gesucht! wenn ich mich nicht täusche

sget = "SOFTWARE\\Microsoft\\Windows.........."; ////// Pfad der Registry wo du hin willst

RegDBGetKeyValueEx(sget, "Name des Strings", nvType, svValue, nvSize); //////svValue ist das der Wert des Strings also der Pfad C:\Programme\meinprogramm\keineahnung

sLsAppData = svValue; ////sieht hier etwas umständlich aus aber jetzt kannste mit dem Pfad ja machen wie und was du willst. smile.gif

Ach ja falls du das noch brauchst

FeatureSetTarget ( MEDIA , "<szidontknow>" , "C:\\zwischenspeicher" );

jetzt kannst du bei den components einfach <szidontknow> angeben und schon wandert alles nach C:\\zwischenspeicher oder wie du es auch nennen willst.

Hoffe das hilft ein bischen weiter.

Gruß

G

Edited by Snoopy87, 13 April 2007 - 07:56.

Wer Kämpft kann verlieren! Wer nicht Kämpft hat schon verloren!

BlaXta

BlaXta
  • Full Members
  • 8 posts

Posted 13 April 2007 - 07:53

danke für die antwort..

warum ich das nicht mit dem skript mache?
naja, ich arbeite mit IS erst seit ca. 3 wochen... d.h. ich hab nicht so wirklich die ahnung davon...

trotzdem danke, ich werde dann mal mit dem code nen bissl rumspielen biggrin.gif

Snoopy87

Snoopy87
  • Full Members
  • 18 posts

Posted 13 April 2007 - 08:00

Genau so ging es mir vor 1 jahr. smile.gif Aber ich habe festgestellt das man mit dem Skript einfach alles genauer machen kann.

Kleiner tipp noch wenn du im skript bist gibt es einen button welcher die eingabe von funktionen erleichtert und bischen verständlicher macht. (würfel mit rotem sternchen drüber. so sieht er bei mir aus. Hilft extrem)

Gruß

G
Wer Kämpft kann verlieren! Wer nicht Kämpft hat schon verloren!

BlaXta

BlaXta
  • Full Members
  • 8 posts

Posted 13 April 2007 - 08:07

ahh dank dir smile.gif

falls es noch was gibt, wo ich nicht weiterkomme, melde ich mich wieder (<- wovon ich ausgehe wink.gif)

BlaXta

BlaXta
  • Full Members
  • 8 posts

Posted 13 April 2007 - 10:33

hm...

also mein code schaut jetzt so aus...

CODE
     
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

sget = "\\SOFTWARE\\FIRM\\Programm\\SW";
sName = "Template";
nvType = REGDB_NUMBER;
 
nReturnVP = RegDBGetKeyValueEx(sget, sName, nvType, svValue, nvSize);
INSTALLDIR = svValue;  

if (svValue !=  "1" || nReturnVP != 0) then
sMessage =  "Bitte installiern Sie zuerst Produkt1!";
MessageBoxEx (sMessage,sTitel, WARNING);
abort;
endif;  


wenn ich nun die install ausführen will, bricht er vor diesem willkommensfenster von dem wizard ab mit der meldung:
"Der Assistent wurde unterbrochen bevor blablub vollständig installiert werden konnte."

ne idee ob das vllt am code liegen könnte, oder is der wurm ganz wo anders drin!?

Edited by BlaXta, 13 April 2007 - 12:29.


Snoopy87

Snoopy87
  • Full Members
  • 18 posts

Posted 13 April 2007 - 13:13

Wann genau führst du denn das skript aus? Bei welcher function? OnBegin?

Was ich nicht so ganz verstehe wieso du nvType als REGDB_NUMBER; deklarierst? Ist ja ein pfad also ein String !? dry.gif


Wer Kämpft kann verlieren! Wer nicht Kämpft hat schon verloren!

BlaXta

BlaXta
  • Full Members
  • 8 posts

Posted 24 April 2007 - 13:31

HI,

sorry, war nicht im land, darum erst die späte antwort...
ja das skript führe ich als OnBegin aus.

warum ich nvType deklariere? das weiß ich auch nicht!
hab nur über google einen ähnlichen code gefunden, wo ich das dann einfach übernommen habe. was der da genau macht, hab ich nciht nachgesehen....

Snoopy87

Snoopy87
  • Full Members
  • 18 posts

Posted 25 April 2007 - 13:21

Hallo,

habe mir die Sache mal angeschaut.

Habe eigentlich nur einen "Fehler" gefunden. Wobei mir unklar ist wie du das dann kompailieren kontest??? huh.gif

Bei der IF abfrage kannst du nicht (svValue != 1 sagen. svValue ist zu diesem zeitpunkt ein String. Dieser kann nicht mit einer Nummer verglichen werden.)
Ansonsten hat es dann bei mir funktioniert.

Hab es unten mal gepostet. ÄNDERUNG wenn er den Pfad findet bricht er ab. Und funktioniert so weit bei mir.

Mit dem REGDB_NUMBER hattest schon recht geht auch so. Unteschied ist in der Hilfe gut erklärt.


STRING sget , sName, sMessage,sTitel, savepath, svValue, INSTALLDIR;
NUMBER nvType, nReturnVP, nvSize;

begin

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

sget = "\\SOFTWARE\\Adobe\\Acrobat Reader\\7.0\\Installer";
//sName = "path";
nvType = REGDB_NUMBER;

nReturnVP = RegDBGetKeyValueEx(sget,"path",nvType,svValue,nvSize);
INSTALLDIR = svValue;

MessageBox ( "Path of Software is " + svValue , INFORMATION );

if (nReturnVP = 0 ) then
sMessage = "Bitte installieren Sie zuerst Produkt1!";
MessageBoxEx (sMessage,sTitel,WARNING);
abort;

endif;


Hoffe das Hilft dir weiter.

Wer Kämpft kann verlieren! Wer nicht Kämpft hat schon verloren!

BlaXta

BlaXta
  • Full Members
  • 8 posts

Posted 26 April 2007 - 07:44

hm... seltsam.
dann liegt der fehler also doch nicht im code.
obwohl, wenn ich meine funktion komplett auskommentiere, geht er ganz normal durch die installroutine.

naja ich spiel dann mal noch nen bisschen rum...
trotzdem danke!

edit:
dry.gif jetzt weiß ich warum er immer mitten in der installation abbricht...

hab jetzt in "Custom Actions" meine funktion mal als <first action> definiert. In der MsgBox steht nix drin, also war es klar, warum der immer abbricht....
nur wunder es mich, warum er mit dann nicht die andere MsgBox anzeigt, wo ich zuerst ein anderes Produkt installieren soll. und warum läuft die Installationsroutine weiter wenn ich auf OK klicke? sehr seltsam hier schon wieder alles.

edit#2
so, nochmal ich...
hab festgestellt, nachdem er in die registry geht und den wert ausliest, er aus irgendeinem grund den key löscht. Darum ist meine MsgBox immer leer... unsure.gif

warum kann denn einfach mal das zeug nicht so funzen wie es soll mad.gif

edit#3
habs jetzt hinbekommen...
mein vorhandenes projekt war irgendwie verpfuscht. hab jetzt nen neues geöffnet, den code reinkopiert und siehe da, es geht smile.gif
jetzt stellt sich nur die frage wie ich den string als INSTALLDIR übergeben kann, da es mit der übergabe im code nicht funzt...

Edited by BlaXta, 26 April 2007 - 09:03.


Snoopy87

Snoopy87
  • Full Members
  • 18 posts

Posted 26 April 2007 - 11:05

Hi

1. entweder du ersetzt INSTALLDIR z.b durch mypersonalpath und fügst das hier ein

mypersonalpath=svValue;
FeatureSetTarget ( MEDIA , "<installpath>" , mypersonalpath );

jetzt kannst du bei den Components -- Destination mit dem <installpath> arbeiten.

2. oder du musst INSTALLDIR auch noch global deklarieren also nach include if....

String INSTALLDIR

bin mir aber gerade nicht sicher. müsste ich selber ausprobieren.

1. müsste aber klappen.



Habe das problem auch ab und zu das auf einmal irgendwas nicht mehr geht und kaum zieht man das ganze nochmal komplett gleich auf geht es wieder ???? blink.gif
Wer Kämpft kann verlieren! Wer nicht Kämpft hat schon verloren!

BlaXta

BlaXta
  • Full Members
  • 8 posts

Posted 26 April 2007 - 12:30

also entweder ich stell mich heut wieder übelst dumm an, oder ich weiß auch nicht...
wenn ich installpath bei destination eingebe, meint er immer "The data entered is invalid"

Snoopy87

Snoopy87
  • Full Members
  • 18 posts

Posted 26 April 2007 - 13:05

du verwendest schon

<installpath>\da\wo\ich\es\hin\will
Wer Kämpft kann verlieren! Wer nicht Kämpft hat schon verloren!

BlaXta

BlaXta
  • Full Members
  • 8 posts

Posted 26 April 2007 - 13:17

QUOTE (Snoopy87 @ 2007-04-26 13:05)
du verwendest schon

<installpath>\da\wo\ich\es\hin\will

jop...

da es bei mir ins root von diesem verzeichnis soll schaut das bei mir so aus
<installpath>\

Snoopy87

Snoopy87
  • Full Members
  • 18 posts

Posted 03 May 2007 - 12:59

hmm

hab das gerade nochmal ausprobiert. also bei mir funktioniert es einwandfrei!?

Ich zieh mir das nochmal genauer rein.

Hast des problem schon gelöst oder immer noch da?



Wer Kämpft kann verlieren! Wer nicht Kämpft hat schon verloren!