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

MsiGetProperty liefer keine Daten


12 replies to this topic

jarpo

jarpo
  • Members
  • 19 posts

Posted 23 January 2006 - 15:54

Hi,

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.


ali

ali
  • Full Members
  • 1,008 posts

Posted 23 January 2006 - 16:14

inder Hilfe habe ich das folgende gefunden:

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?


jarpo

jarpo
  • Members
  • 19 posts

Posted 23 January 2006 - 16:49

Hi Ali, danke für die schnelle Antwort.
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.

herrbecht

herrbecht
  • Full Members
  • 59 posts

Posted 23 January 2006 - 18:10

Hallo jarpo

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.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 24 January 2006 - 09:24

Du musst ein Property mit Namen SecureCustomProperties anlegen und als Wert die Namen (durch Komma getrennt) der Properties angeben, die über die Kommandozeile (also von setup.exe an das MSI Setup) übergeben werden sollen, in diesem Fall SETUPEXEDIR

jarpo

jarpo
  • Members
  • 19 posts

Posted 24 January 2006 - 12:55

danke für die Tipps,

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.



ali

ali
  • Full Members
  • 1,008 posts

Posted 24 January 2006 - 13:36

ich verstehe etwas nicht so ganz:
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.


herrbecht

herrbecht
  • Full Members
  • 59 posts

Posted 24 January 2006 - 13:51

hi jarpo

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.


jarpo

jarpo
  • Members
  • 19 posts

Posted 24 January 2006 - 14:06

es gehht darum den das ich Setup-Quellverzeichnis rausfinden will. In der Log-Datei habe ich festgestellt, daß Property SETUPEXEDIR liefert mir die notwendigen Informationen. In OnBegin versuche ich also den Wert wie folgt auszulesen:

[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


ali

ali
  • Full Members
  • 1,008 posts

Posted 24 January 2006 - 14:19

an welcher Stelle hast du denn die CA die das Script ausführt in die Sequenzen eingefügt, wie ist die CA eingestellt?

Edited by ali, 24 January 2006 - 14:19.


jarpo

jarpo
  • Members
  • 19 posts

Posted 24 January 2006 - 14:36

zuerst danke an herrbecht für die Beschreibung. Ich versuche es durzuführen.


ali,
die function OnBegin() ist das Initialisierungscode beim Start jeder Sequenz (Benutzeroberfläche und Ausführen), also ganz am Anfang, es ist keine CA.

ali

ali
  • Full Members
  • 1,008 posts

Posted 24 January 2006 - 14:46

vielleicht ist das dein Problem, ich habe mir die Mühe gemacht es nachzustellen, wenn ich eine funktion in einer CA übergebe und diese in zb in der UI Sequenz nach DLLWrapStartup einhänge und das compilierte Setup mit ALLUSERS="0" als normalen User ausführe bekomme ich den korrekten wert zur Setup.exe ausgegeben.


jarpo

jarpo
  • Members
  • 19 posts

Posted 27 January 2006 - 09:39

danke an alle für die nützlichen Tips.

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.