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

MSI Handle


6 replies to this topic

ANo

ANo
  • Full Members
  • 179 posts

Posted 27 July 2004 - 08:54

Hallo,
meine Frage bezieht sich auf Datenbankzugriff mittels Script.

in vbs-Script kann ich schreiben:

sSQL = "SELECT ..."

Set oDb = Session.Database
Set oView = oDb.OpenView(sSQL)
oView.Execute
...

Wie schreibt man dies in InstallShield-Script in der aktuellen Installation?

sSQL = "SELECT ..."

hDb = MsiGetActiveDatabase(hMSI)
iRe = MsiDatabaseOpenView(hDb, sSQL, hView)
iRe = MsiViewExecute(hView,0)
...

Die Frage zielt auf hMSI - Handle innerhalb der akuellen Installation.
Woher bekomme ich diesen Handle?

ISMSI_HANDLE kann man nicht benutzen in BasicMSI.

Muß ich immer von einer Funktion in Setup.rul ausgehen und den Handle durchreichen?

export prototype MyFunction(HWND);

function MyFunction(hMSI)
begin
fktA(hMSI); <-- in Datei xyz.rul
end;


Gibt es dazu Beispiele, Literatur?

MfG
André


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 27 July 2004 - 16:43

Dein Skript hat immer eine Einsprung-Funktion (sonst kannst du es ja nicht als Custom Action aufrufen), und dort wird das Hanle übergeben.

Der Ordner Script Samples im Verzeichnis Samples im InstallShield Programmverzeichnis enthält eine setup.rul mit Beispielen zum Thema

ANo

ANo
  • Full Members
  • 179 posts

Posted 28 July 2004 - 14:26

Hallo Stefan,

die Antwort finde ich etwas dürftig.
Ich weiß, wie ich es anwenden muß, aber der Mechanismus ist unklar.

Ich weiß, daß ich
export prototype MyFunction(HWND);
so zu schreiben habe, damit ich die Funktion
1. in der Customaction nutzen kann
und 2. Datenbankaktionen ausführen kann.

Dies steht auch so im Kommentar in dem von Dir aufgeführten Beispiel.
Der englische Text beschreibt dies besser als ein Kommentar in einer vom deutschen IS X generierten Setup.rul.

Wie kommt das HWND dahin und woher?

Kann ich das HWND auch auf anderem Wege an anderer Stelle bekommen?

Ich nehme an die Antwort ist nein, nur eine Einsprungfunktion liefert das Handle,
richtig?

MfG
André



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 29 July 2004 - 09:05

Zum Mechanismus:
MSI unterstützt von Haus aus ja kein InstallScript als Custom Action, aber zum Beispiel DLLs. Diese müssen eine Funktion exportieren, die ein Handle übernimmt. Die DLL und den Namen der aufzurufenden Funktion trägt man in die MSI Datenbank ein. Beim Aufruf der Custom Action lädt die Windows Installer Runtime dann die DLL und ruft die angegebene Funktion auf, wobei das Handle auf die aktuelle Instalaltion übergeben wird.
Um Custom Actions in InstallScript zu ermöglichen, hat InstallShield die ScriptBridge.dll geschrieben. Diese exportiert eine Funktion, die von MSI aufgerufen wird und reicht das Installer handle dann an deine InstallScript Funktion weiter. Auf diesem Weg wird das Handle an deine InstallScript Funktion übergeben.

Ich verstehe deine Frage nicht, ob du das Handle auch "an anderer Stelle" bekommen kannst. Meinst du in einer Skriptfunktion, die nicht als Custom Action aufgerufen wird? Wie willst du die Funktion dann aufrufen?

ANo

ANo
  • Full Members
  • 179 posts

Posted 29 July 2004 - 17:45

Hallo Stefan,
vielen Dank für die Erklärung, die erleutet den Tunnel ganz schön.

Folgende Scenarium:

Ich habe eine CustomAction, die eine Einsprungfunktion hat, welche das
MSI-Handle bereitstellt. Damit die Einsprungfunktion übersichtlich ist,
gibt es hier Funktionen, die zum Teil in anderen rul-Dateien liegen

(1. checken/auslesen Hardlock --> Hardlock.rul mit zig Funktionen
2. Darstellung der Information in einem Dialog --> Settings.rul).

Aber um in der hintersten Ecke in einer Funktion mit der MSI-API
MsiGetLanguage(hInstall) die Sprache zu ermitteln,
benötige ich doch auch den MSI-Handle dazu, oder?

Ich möchte sowenig wie möglich mit globalen Variablen arbeiten.
Zur Zeit reiche ich den MsI-Handle als Funktionsparameter durch.

Sorry, für die vielen Fragen
André

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 29 July 2004 - 21:37

Ja genau, entweder als Parameter durchreichen, oder als globale Variable ablegen. Das sind die einzigen Möglichkeiten.

ANo

ANo
  • Full Members
  • 179 posts

Posted 30 July 2004 - 15:57

Hallo Stefan,
vielen Dank für die Auskunft zu dem Topic.

MfG
André