Hätte ich fast vergessen.
Quasi als Präventiv(vor)schlag (bevor die Frage kommt: wie kann man das prüfen?) hier eine Idee -
Mangels Rechner ohne
XML weiß ich nicht, wie so ein Programm reagiert. Logisch, es wird nicht funktionieren ... Aber wahrscheinlich dürfte das System auch ein paar Fehler verursachen - vergleichbar mit dem
statischen Laden von
DLL-Funktionen, die es nicht gibt. Will sagen: die Fehler lassen sich evtl. nicht einfach unterbinden, weil die Typbibliothek keine dynamischen Zugriffe enthält. (Hab jedenfalls auf die Schnelle nichts davon gesehen.)
Um also ohne unschöne Fehlermeldungen auszukommen, empfehle ich die Prüfung in den Projektquelltext (*.dpr) zu schreiben und noch
vor dem Erzeugen der Forms auszuführen:
Delphi-Quellcode:
uses
{ ... },
Windows, Registry, ComObj, SysUtils;
function DoesXMLExist: boolean;
var
reg : TRegistry;
s :
string;
begin
Result := false;
reg := TRegistry.Create(KEY_READ);
if(reg <>
nil)
then
with reg
do try
RootKey := HKEY_CLASSES_ROOT;
if(OpenKey('
CLSID\' + GuidToString(CLASS_DOMDocument40) +
'
\InProcServer32',false))
then
try
s := ReadString('
');
Result := (s <> '
')
and (fileexists(s));
finally
CloseKey;
end;
finally
Free;
end;
end;
begin
if(
not DoesXMLExist)
then begin
MessageBox(0,'
Dieses Programm erfordert min. MS XML 4',
nil,
MB_ICONERROR
or MB_OK);
Halt;
end;
// hier würden dann die Forms erzeugt werden, usw.
Application.Initialize;
{ ... }
end.
Der Wert
CLASS_DOMDocument40 ergibt sich in diesem Fall aus sakuras Beispielcode. Die Funktion "CoDOMDocument40.Create" verweist auf eben diesen Wert, der eine
GUID ({88D969C0-F192-11D4-A65F-0040963251E5}) enthält. Diese muss es als Registryschlüssel geben, und sie sollte den Pfad zur entsprechenden
DLL (hier "msxml4.dll") enthalten. Dann dürfte alles in Butter sein.
Im Fehlerfall (sprich:
XML ist nicht installiert, und das Interface existiert darum nicht) wird die Anwendung hoffentlich beendet, bevor irgendein Formular erzeugt wird und evtl. automatisch (OnCreate, usw.) auf
XML-Dateien zuzugreifen versucht.