Installpfad aus Registry
Posted 10 November 2006 - 19:07
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 ?
Posted 10 November 2006 - 19:51
Stefan Krüger
InstallSite.org twitter facebook
Posted 11 November 2006 - 23:50
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
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.
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.
Stefan Krüger
InstallSite.org twitter facebook
Posted 12 April 2007 - 15:01
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.
Posted 13 April 2007 - 07:44
@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.
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.
Posted 13 April 2007 - 07:53
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
Posted 13 April 2007 - 08:00
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
Posted 13 April 2007 - 08:07
falls es noch was gibt, wo ich nicht weiterkomme, melde ich mich wieder (<- wovon ich ausgehe )
Posted 13 April 2007 - 10:33
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.
Posted 13 April 2007 - 13:13
Was ich nicht so ganz verstehe wieso du nvType als REGDB_NUMBER; deklarierst? Ist ja ein pfad also ein String !?
Posted 24 April 2007 - 13:31
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....
Posted 25 April 2007 - 13:21
habe mir die Sache mal angeschaut.
Habe eigentlich nur einen "Fehler" gefunden. Wobei mir unklar ist wie du das dann kompailieren kontest???
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.
Posted 26 April 2007 - 07:44
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:
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...
warum kann denn einfach mal das zeug nicht so funzen wie es soll
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
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.
Posted 26 April 2007 - 11:05
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 ????
Posted 26 April 2007 - 12:30
wenn ich installpath bei destination eingebe, meint er immer "The data entered is invalid"
Posted 26 April 2007 - 13:05
<installpath>\da\wo\ich\es\hin\will
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>\
Posted 03 May 2007 - 12:59
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?