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

Im Unattended Modus keine Registry Einträge


21 replies to this topic

Phil_b

Phil_b
  • Full Members
  • 40 posts

Posted 28 August 2008 - 15:42

Hallo zusammen

Ich habe ein ganz normales Basic MSI Projekt und mache über diverse Components auch Registryeinträge.

Beim normalen Installieren funktioniert das Ganze auch. Wenn ich jedoch das Setup unattended* ausführe, werden die Dateien zwar kopiert jedoch keine Registry Einträge geschrieben. Wieso ? Was mache ich falsch ?

Danke für eure tipps

Phil_b

* = Benutze folgendes Command

msiexec /i "[Pfad zum MSI]" /qn[B]

UNeverNo

UNeverNo
  • Full Members
  • 24 posts

Posted 28 August 2008 - 16:25

Beim silent install werden afaik Aktionen im User Interface nicht ausgeführt. Kann es daran liegen?

Phil_b

Phil_b
  • Full Members
  • 40 posts

Posted 01 September 2008 - 13:43

QUOTE (UNeverNo @ 2008-08-28 16:25)
Beim silent install werden afaik Aktionen im User Interface nicht ausgeführt. Kann es daran liegen?

Hallo

Danke für deinen Input. Was meinst du genau mit afaik Aktionen ? Die Registrykeys sind einer Component zugewiesen, diese Component ist wieder um einem Feature zugewiesen.

Im normalen Modus werden diese Registry korrekt geschrieben. Liegt es an einer Feature Einstellung (siehe Printscreen).

Gruss
Phil_B

Attached Images

  • Unbenannt.JPG


UNeverNo

UNeverNo
  • Full Members
  • 24 posts

Posted 03 September 2008 - 11:35

QUOTE (Phil_b @ 2008-09-01 13:43)
Danke für deinen Input. Was meinst du genau mit afaik Aktionen ? Die Registrykeys sind einer Component zugewiesen, diese Component ist wieder um einem Feature zugewiesen.

afaik = as far as i know

Ich hatte vermutet, dass Du die Registryeinträge evtl. über eine Scriptsprache und eine benutzerdefinierte Aktion schreiben würdest (was man eigentlich nicht machen soll) und diese Aktion halt im User Interface ausführst. Die Aktionen im UserInterface selbst werden aber im silent mode nicht ausgeführt soweit ich weiß.

Aber wie gesagt das sollte bei Dir nicht der Fall sein...

ali

ali
  • Full Members
  • 1,008 posts

Posted 09 September 2008 - 07:38

du solltest mal ein Log mit /L*V erstellen und schauen, ob das Feature in dem die RegKomponenten hängen für die lokale installation ausgewählt wurden!
Bei der Silent Installation solltest du evtl. mit ADDLOCAL angeben, welche Feature lokal installiert werden sollen.

Phil_b

Phil_b
  • Full Members
  • 40 posts

Posted 10 September 2008 - 08:50

QUOTE (ali @ 2008-09-09 07:38)
du solltest mal ein Log mit /L*V erstellen und schauen, ob das Feature in dem die RegKomponenten hängen für die lokale installation ausgewählt wurden!
Bei der Silent Installation solltest du evtl. mit ADDLOCAL angeben, welche Feature lokal installiert werden sollen.

Die Registry Einträge werden jetzt zwar geschrieben, teilweise aber nicht alle und nicht mit allen Werten.

Mache ich evt. den Aufruf falsch ?

CODE
msiexec /i "Name.msi" /qn ADDLOCAL=NameFeature


Was ich noch vergessen habe zu erwähnen ist, dass die CustomAction, die die Werte aus dem INI File ausliesst folgende Eigenschaften hat (siehe Attachment).

Attached Images

  • test.JPG


ali

ali
  • Full Members
  • 1,008 posts

Posted 10 September 2008 - 09:00

wie ich dir schon geschrieben habe, solltest du mal ein Log anfertigen, und schauen ob deine Propertys mit entsprechenden Werten gefüllt sind, oder vielleicht während der Silent installation inhaltlich geändert bzw. gelöscht werden.

Phil_b

Phil_b
  • Full Members
  • 40 posts

Posted 10 September 2008 - 09:40

QUOTE (ali @ 2008-09-10 09:00)
wie ich dir schon geschrieben habe, solltest du mal ein Log anfertigen, und schauen ob deine Propertys mit entsprechenden Werten gefüllt sind, oder vielleicht während der Silent installation inhaltlich geändert bzw. gelöscht werden.

Ok, aber wie erstellt man ein LOG File ?

ali

ali
  • Full Members
  • 1,008 posts

Posted 10 September 2008 - 09:48

QUOTE (Phil_b @ 2008-09-10 10:40)
QUOTE (ali @ 2008-09-10 09:00)
wie ich dir schon geschrieben habe, solltest du mal ein Log anfertigen, und schauen ob deine Propertys mit entsprechenden Werten gefüllt sind, oder vielleicht während der Silent installation inhaltlich geändert bzw. gelöscht werden.

Ok, aber wie erstellt man ein LOG File ?

msiexec /i "Name.msi" ADDLOCAL=NameFeature /L*V c:\inst.log /qn

Phil_b

Phil_b
  • Full Members
  • 40 posts

Posted 29 September 2008 - 10:45

Hallo ali

Ich wollte vorhin ein Logfile für das Setup im unattended Modus erstellen. Dein Aufruf ging leider nicht.

Was habe ich falsch eingegeben ?

CODE
msiexec /i "Name.msi" /L *V c:\test.log /qn


Der Aufruf mache ich aus dem gleichen Verzeichnis in welchem sich das MSI befindet.

ali

ali
  • Full Members
  • 1,008 posts

Posted 29 September 2008 - 10:59

msiexec /i "Name.msi" /L*V c:\test.log /qn
es muss heißen /L*V nicht /L *V

der installer ist da ein wenig empfindlich.

Phil_b

Phil_b
  • Full Members
  • 40 posts

Posted 29 September 2008 - 12:36

QUOTE (ali @ 2008-09-29 10:59)
msiexec /i "Name.msi" /L*V c:\test.log /qn
es muss heißen /L*V nicht /L *V

der installer ist da ein wenig empfindlich.

achso, ok smile.gif danke

das Erstellen des Logfiles hat nun funktioniert. Die Registry Einträge werden zwar korrekt erstellt, jedoch wird die Funktion (Installscript) "ReadConfig", welches Werte aus einem INI File ausliest und Properties überschreibt nicht korrekt ausgeführt. Einige Properties Werte werden danach in der Registry gebraucht u. sind jedesmal leer.

Hier der Installscript Code

CODE

function ReadConfig(hMSI)  

//Declaration
STRING  m_strSourceDir,svSourcePath;
STRING  m_strResult;
STRING  m_strINIFile;
STRING  m_strSection;                                    
INT  m_intSize,nvSize;

begin              
m_intSize = 255;
MsiGetProperty(hMSI,"CONFIGPATH",m_strResult, m_intSize);

if (StrLength(m_strResult) <= 0) then
 MsiGetProperty(hMSI,"SourceDir",svSourcePath,nvSize);
 m_strResult =  svSourcePath;
endif;

//Build Path for INI File
m_strINIFile = m_strResult ^ "Name.ini";
   
   // Wird kein INI File gefunden, wird muss auch nichts gesetzt werden.
if (FindFile(m_strResult,"Name.ini",m_strResult) >= 0) then                                                                    
 //Read General Setup Config Entries
 m_strSection = "Main";                                                              
 ReadConfigEntry(hMSI, m_strINIFile, m_strSection, "InstallPath", "INSTALLDIR");
endif;                                                                                
end;


CODE

function ReadConfigEntry(hMSI, INIFile, Section, Key, Property)  

//Declaration
STRING m_strResult;

begin            

//Read INI String
GetProfString(INIFile, Section, Key, m_strResult);

m_strResult = ReplaceString(hMSI, m_strResult, "%ProgramFolder%");

//Write Value to Property
// Darf nur geschrieben werden, wenn auch ein Wert vorhanden ist.
//MessageBox(m_strResult + " - " + Property,INFORMATION);
//if (m_strResult != "") then
 MsiSetProperty(hMSI,Property,m_strResult);
//endif;

end;

Edited by Phil_b, 29 September 2008 - 15:42.


ali

ali
  • Full Members
  • 1,008 posts

Posted 29 September 2008 - 12:58

wann/wo führst du das script aus?

Phil_b

Phil_b
  • Full Members
  • 40 posts

Posted 29 September 2008 - 13:47

QUOTE (ali @ 2008-09-29 12:58)
wann/wo führst du das script aus?

Die Custom Action wird nach der Funktion AppSearch.

Hier die Properties dieser Custom Action
user posted image

ali

ali
  • Full Members
  • 1,008 posts

Posted 29 September 2008 - 14:15

hast du im log mal geschaut ob deine Propertys auch werte haben so wie CONFIGPATH und so. Evtl. must du Propertys dem SecureCustomProperty hinzufügen.
Schau mal dein log durch, wann Propertys Werte erhalten, und wann nicht.
Du kannst auch mit SprintfMsiLog eigene Einträge aus ISScript dem log hinzufügen.

Du führst die Aktion auch für InstallInitalize aus? Sonst könntest du auch Probleme mit dem CustomActionData haben.

Phil_b

Phil_b
  • Full Members
  • 40 posts

Posted 29 September 2008 - 15:52

QUOTE (ali @ 2008-09-29 14:15)
hast du im log mal geschaut ob deine Propertys auch werte haben so wie CONFIGPATH und so. Evtl. must du Propertys dem SecureCustomProperty hinzufügen.
Schau mal dein log durch, wann Propertys Werte erhalten, und wann nicht.
Du kannst auch mit SprintfMsiLog eigene Einträge aus ISScript dem log hinzufügen.

Du führst die Aktion auch für InstallInitalize aus? Sonst könntest du auch Probleme mit dem CustomActionData haben.

Komischerweise finde ich CONFIGPATH nirgends im Log, aber das Propertie SourceDir finde ich u. hat auch den korrekten Wert.

Das eine Propertie welches in der Registry nicht gesetzt wird, ist auch im Log unter SecureCustomProperties aufgelistet aber sonst nirgends.

Die Installscript Funktion "ReadConfig" wird laut des Logs auch ausgeführt

CODE

Action start 16:35:17: ReadConfig.
InstallShield 16:35:18: Running InstallScript function f2
InstallShield 16:35:18: Using temp folder C:\DOKUME~1\xxx\LOKALE~1\Temp\{E12F2663-E0B9-4B66-883F-27E1FA6CF23F}
InstallShield 16:35:18: Installing engine...
InstallShield 16:35:18: Using product language 1033
InstallShield 16:35:18: Extracting support file setup.inx to C:\DOKUME~1\xxx\LOKALE~1\Temp\{E12F2663-E0B9-4B66-883F-27E1FA6CF23F}\setup.inx
InstallShield 16:35:18: Opening stream of file C:\WINDOWS\Installer\MSI1857.tmp
InstallShield 16:35:18: Extracting support file ISRT.dll to C:\DOKUME~1\xxx\LOKALE~1\Temp\{E12F2663-E0B9-4B66-883F-27E1FA6CF23F}\ISRT.dll
InstallShield 16:35:18: Extracting support file IsConfig.ini to C:\DOKUME~1\xxx\LOKALE~1\Temp\{E12F2663-E0B9-4B66-883F-27E1FA6CF23F}\IsConfig.ini
InstallShield 16:35:18: Extracting support file _isres1033.dll to C:\DOKUME~1\xxx\LOKALE~1\Temp\{E12F2663-E0B9-4B66-883F-27E1FA6CF23F}\_isres.dll
InstallShield 16:35:18: Extracting support file String1033.txt to C:\DOKUME~1\xxx\LOKALE~1\Temp\{E12F2663-E0B9-4B66-883F-27E1FA6CF23F}\String1033.txt
InstallShield 16:35:18: Skipping optional support file _isuser1033.dll
InstallShield 16:35:18: Setting script cmdline...
InstallShield 16:35:18: ProductCode is {8984BEC8-8C20-4A1A-B59D-B74BAD22ACEA}
InstallShield 16:35:18: Initializing Engine
InstallShield 16:35:19: Done Initializing...
MSI (s) (2C!30) [16:35:19:001]: Note: 1: 2732 2: 0
MSI (s) (2C!30) [16:35:19:001]: Note: 1: 2732 2: 0
MSI (s) (2C!30) [16:35:19:010]: Note: 1: 2732 2: 0
InstallShield 16:35:19: Registering Msi Server...
InstallShield 16:35:19: Invoking script function ReadConfig
InstallShield 16:35:19: CallScriptFunctionFromMsiCA() ends
MSI (s) (2C:C4) [16:35:19:050]: Doing action: IsLaunchConditions.6FC97963_2511_11D4_BB8A_00C04F20D375
Action ended 16:35:19: ReadConfig. Return value 1.


Die Installscript Funktion wird als Custom Action mit der Sequence Number 405 ausgeführt mit der Condition NOT Installed.

ali

ali
  • Full Members
  • 1,008 posts

Posted 30 September 2008 - 07:42

dein Script ist ja nur dafür da um INSTALLDIR zu setzen, abhängig davon ob es in einem Property (welches du wahrscheinlich über AppSearch ausliest), SourceDir, oder IniFile gefunden wird. Gewinnen tut immer das IniFile.
Welche anderen Property meinst du, im Script wird nur INSTALLDIR gesetzt. Wenn INSTALLDIR also nach deinem Scriptaufruf den Richtigen wert hat, ist doch alles ok, wenn nicht, würde ich mir mal ein paar MsgBoxen einbauen und während der Installation Werte ausgeben lassen.

Phil_b

Phil_b
  • Full Members
  • 40 posts

Posted 30 September 2008 - 09:43

QUOTE (ali @ 2008-09-30 07:42)
dein Script ist ja nur dafür da um INSTALLDIR zu setzen, abhängig davon ob es in einem Property (welches du wahrscheinlich über AppSearch ausliest), SourceDir, oder IniFile gefunden wird. Gewinnen tut immer das IniFile.
Welche anderen Property meinst du, im Script wird nur INSTALLDIR gesetzt. Wenn INSTALLDIR also nach deinem Scriptaufruf den Richtigen wert hat, ist doch alles ok, wenn nicht, würde ich mir mal ein paar MsgBoxen einbauen und während der Installation Werte ausgeben lassen.

Mein Script verwende ich nicht 1:1 genau so wie ich gepostet habe, dies war nur ein Beispiel. Ich arbeite noch mit anderen, selbst definierten Properties.

Ich habe nun ein paar Messageboxen im Script platziert und festgestellt das einige Properties leer sind. Dies sind u.a. CONFIGPATH, SourceDir, SETUPEXEDir, etc. Ich brauche aber diese Werte, da ich ja sonst nicht auf das INI File zugreifen kann um die Properties zu setzen.

Gibt es sonst noch ein Propertie das ich über MsiGetProperty auslesen kann, das mir den aktuellen Pfad, des ausführenden MSI File (oder Setup.exe) gibt ?

Oder kann ich allenfalls beim msiexec Aufruf das Propertie setzen, dann wäre das Problem auch gelöst.

ali

ali
  • Full Members
  • 1,008 posts

Posted 30 September 2008 - 10:17

Hallo,
also SourceDir sollte bei der Erstinstallation gesetzt sein, ich würde aber evtl SOURCEDIR auslesen.
SETUPEXEDIR ist nur gesetzt, wenn die Installation über eine Setup.exe gestartet wurde.
CONFIGPATH wirst du ja selbst setzen, daher musst du schaun wieso das nicht gesetzt ist.

Du kannst Propertys aber auch über eine Benutzerdefinierte Aktion setzen.

Ansonsten kannst du ja mal am Ende deines log schaun, dort sind fast alle Propertys gelistet, die während der Installation gesetzt wurden.

Edited by ali, 30 September 2008 - 10:19.


Phil_b

Phil_b
  • Full Members
  • 40 posts

Posted 30 September 2008 - 10:54

Ich hab's auch mit SOURCEDIR probiert, leider ist auch dieser Wert leer. Scheint so, als würde meine Aktion zu früh (Sequence Number 405) ausgeführt.

Im LOG ist seltsamerweise ersichtlich das dieses SOURCEDIR Propertie korrekt gesetzt wurde.

ali

ali
  • Full Members
  • 1,008 posts

Posted 30 September 2008 - 11:05

versuch mal wenn du sie nach CostFinalize setzt.

Phil_b

Phil_b
  • Full Members
  • 40 posts

Posted 30 September 2008 - 11:28

QUOTE (ali @ 2008-09-30 11:05)
versuch mal wenn du sie nach CostFinalize setzt.

Perfekt biggrin.gif jetzt funktioniert's.

Besten Dank