MsiGetProperty liefer keine Daten
Posted 23 January 2006 - 15:54
folgendes Problem tritt bei mir auf.
In der Function OnBegin lese ich SETUPEXEDIR-Property aus.
MsiGetProperty(ISMSI_HANDLE, "SETUPEXEDIR", szSetupVerzeichnis, nBuffer);
Wird das Setup auf einem Rechner mit Adminrechten ausgeführt, bekomme ich das richtige Ergebnis (szSetupVerzeichnis=z:\Setup).
Wird das Setup auf einem Rechner mit beschrenkten Rechten ausgeführt, ist die Variable leer (szSetupVerzeichnis=).
Wie kann ich das Setup-Quellverzeichnis (wo meine Setup.exe liegt. In meinem Fall ist es momentan eine CD) auf einem Rechner mit beschrenkten Rechten auslesen.
Hinweis:
Mit SourceDir, SRCDIR habe ich auch versucht. Da bekomme ich leider Angaben nur zu dem lokalen Temp-Verzeichnis c:\temp\{...}\, wo die Seupinfo zwischengespeichert wird.
Posted 23 January 2006 - 16:14
Einschränkungen von SETUPEXEDIR
Die Angabe von SETUPEXEDIR unterliegt zwei Einschränkungen:
- SETUPEXEDIR wird von Setup.exe eingestellt. Wenn die Endbenutzerin oder der Endbenutzer das MSI-Paket direkt ausführt, wird SETUPEXEDIR nicht eingestellt. Dem könnten Sie Rechnung tragen, indem Sie eine doppelte Implementierung in Ihre Installation einbinden, eine, die SETUPEXEDIR verwendet, und eine, die SourceDir verwendet. Sie könnten auf das Vorhandensein von SETUPEXEDIR testen und, wenn die Eigenschaft nicht gesetzt ist, könnten Sie bedingungsgebunden die Implementierung mit SourceDir ausführen.
- Eventuell wird SETUPEXEDIR bei der Deinstallation nicht eingestellt. Wenn der Endbenutzer die Deinstallation durch Ausführung von Setup.exe veranlasst, wird SETUPEXEDIR eingestellt. Wenn er jedoch die Deinstallation über das Applet Software veranlasst, wird SETUPEXEDIR nicht eingestellt.
trifft vielleicht das erstere zu?
Posted 23 January 2006 - 16:49
Die Einschrenkungen kenne ich. es ist leider nicht der fall.
Das Problem liegt wo anders. Ich habe versucht andere Property's auszulesen wie z.B.: USERNAME, LASTUSEDSOURCE oder CURRENTDIRECTORY. Die Ergebnisse sind gleich.
Beim user mit Admin-Rechten sind die Werte da, bei usert mit beschrenkten Rechten sieht es so aus, daß die Eigenschaften keinen Wert haben, was es nicht der Fall ist, da in der Log-Datei kann ich alle diese Werte (von den gesuchten Property's) sehen.
Posted 23 January 2006 - 18:10
Wenn ich das richtig verstanden habe rufst du msigetproperties aus einem InstallScript auf?... ich nehme deshalb mal an das du auf den Rechnern erst die InstallScriptEngine installierst (isscriptXX.msi) oder ScriptEngine in deine Setup.exe integriert hast, damit sie (per Bootstrapping) vor der eigentlichen Installation installiert wird.
Wenn das der Fall ist liegt es wahrscheinlich an der fehlerhaften InstallScript-Installation.
Genau dieses Problem hatte ich auch und es hat mich (fast) zum Wahnsinn getrieben.
In der InstallScript-Installation wird ein falscher Registry-Eintrag gesetzt, der bewirkt, daß die DCOM-Einstellungen für den "InstallShield InstallDriver" (IDriver) statt auf RunAs="Launching User" (<-wie es korrekt wäre) , auf RunAs="Interactive User" setzt. Und mit dieser FLASCHEN Einstellung funktioniert das Script nur richtig mit Admin-Rechnten.
Man kann sich die DCOM-Einstellungen ansehen, in dem man das Programm "dcomcnfg" startet (Start->Ausführen->dcomcnfg->Enter). Dort findest du unter "Component Services"->"Computer"->"Arbeitsplatz"->"DCOM-Konfiguration" mehrere Einträge für "InstallShield InstallDriver". Wenn du dir per Rechtsklick die Eigenschaften ansiehst und auf den Reiter "Identität" klickst wirst du bei einem der Einträge sehen, daß statt "Benutzer der die Anwendung startet" "Interaktiver Benutzer" ausgewählt ist.
Um das Problem zu beheben musst du die InstallScript-Engine (die irgendwo in den InstallShield-Ordnern schlummert) öffnen und verändern (BITTE VORHER SICHERHEITSKOPIE ANLEGEN!!!). Wenn du die Datei per Direct-Edit-Modus mit InstallShield öffnest kannst du den Wert einfach ändern...
Ich poste am besten morgen nochmal die Details die da zu machen sind, weil ich jetzt dringend weg muß!!! und das auch nicht mehr alles auswendig weiß, da es schon ein halbes Jahr her ist - Sorry (Wenn das Problem auch wirklich das selbe ist wie bei dir?!?)
aber hier noch ein Link zum SupportForum von InstallShield durch den ich damals den Fehler beheben konnte: http://community.ins...&highlight=dcom
Edited by herrbecht, 23 January 2006 - 18:13.
Posted 24 January 2006 - 09:24
Stefan Krüger
InstallSite.org twitter facebook
Posted 24 January 2006 - 12:55
1. Die Lösung mit SecureCustomProperties funktioniert leider nicht. Ich bekomme immer das gleiche Pfad: C:\Temp\{... Produckt-Code ...}\ zurück.
2. Die Lösung mit DCOM-Einstellungen versuche ich zu testen. Was ich ich bis jetzt festgestellt habe, die beschriebene Einstellungen sind auf "Interaktiver Benutzer" gesetzt.
Wie kann ich auf einem Rechner (mit Windows XP) mit beschränkten User-Rechten, meine Installation unbeaufsichtigt als Administrator ausführen.
Posted 24 January 2006 - 13:36
Oben schreibst du das SETUPEXEDIR keinen Wert hat jetzt hat es den Wert C:\Temp\...
Welches Property beschreibst du denn nun? SETUPEXEDIR oder SourceDir. Wenn du SourceDir abfragst dann ist der Wert evtl. richtig, denn dieses zeigt immer dorhin wo das msi Pakte abgelegt wurde. Also in deinem Fall in den temporär nach Temp. Wie sieht es denn mit SETUPEXEDIR aus, wenn du es in den SecureCustomProperties angibst.
Edited by ali, 24 January 2006 - 13:37.
Posted 24 January 2006 - 13:51
hier nochmal die Details zu den Änderungen an der isscriptXX.msi:
1. Sicherheitskopie erstellen ;-)
3. IsscriptXX.msi mit InstallShield (im Direct-Edit-Modus) öffnen
4. Komponente "iDriver.exe_Interactive_Key" anklicken und da in der Registry-Einstellung unter "HKEY_CLASSES_ROOT\AppID\<GUID>\" den Wert von "RunAs" auf "Launching User" setzen (<- exakte Schreibweise beachten)
5. Außerdem den Wert der Eigenschaft ALLUSERS im Eigenschaft-manager von 2 auf 1 setzen
6. SAVE
Die Veränderte Installation einfach auf dem betreffenden Computer neu ausführen!
Keine zusätzlichen Parameter mitgeben, weil es sich um eine Folgeinstallation handelt (ich meine REINSTALLMODE). Meine Erfahrung war daß wenn ich REINSTALLMODE verändert habe, die Änderungen nicht vortgenommen wurden!
Also einfach Installation starten...
(mit "keine zusätzlichen Parameter" meine ich natürlich nicht Silent/Logging-PArameter sondern nur die REINSTALL/MODE - Parameter!
Hoffe ich habs nicht zu unklar erklärt und hoffe es behebt dein Problem
...alle Angaben ohne Gewähr ;-)
QUOTE |
Wie kann ich auf einem Rechner (mit Windows XP) mit beschränkten User-Rechten, meine Installation unbeaufsichtigt als Administrator ausführen? |
Buuh...keine Ahnung...
Ich habe mich damals an ein Testgerät gesetzt und das ganze per Softwareverteilung probiert. Da hatte ich nämlich das Problem weil ich da SYSTEM-Rechte statt ADMIN-Rechte hatte.
Du musst das halt da testen, wo das Problem aufgetreten ist und du keine ADMIN-Rechte hast....
Edited by herrbecht, 24 January 2006 - 14:01.
Posted 24 January 2006 - 14:06
[code=auto:0]
function OnBegin()
number nBuffer;
number nReturn;
begin
// Setupverzeichnis festlegen.
nBuffer = 256;
MsiGetProperty(ISMSI_HANDLE, "SETUPEXEDIR", szSetupVerzeichnis, nBuffer);
MessageBox("SETUPEXEDIR: " + szSetupVerzeichnis, INFORMATION);
end;
Leider ohne Erfolg. Als Rückgabewert bekomme ich C:\Temp\{... Produckt-Code ...}\ zurück. Die Setup.exe Datei liegt aber auf der CD (R:\Update\Setup.exe).
Hinweis:
Nach der Installation steht der korrekte Wert auch in der LOG-Datei drin:
Property©: SETUPEXEDIR = R:\Update
Posted 24 January 2006 - 14:19
Edited by ali, 24 January 2006 - 14:19.
Posted 24 January 2006 - 14:36
ali,
die function OnBegin() ist das Initialisierungscode beim Start jeder Sequenz (Benutzeroberfläche und Ausführen), also ganz am Anfang, es ist keine CA.
Posted 24 January 2006 - 14:46
Posted 27 January 2006 - 09:39
das Problem habe inzwischen anders behoben, in dem ich statt Basic-MSI Projekt ein InstallScript Projekt erstellt habe. Dort habe ich alle meine Scripte übernommen. Jetzt kann ich mit beiden Funktionen SRCDIR und SETUPEXEDIR korrekten Source-Pfad ermitteln.