Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi prüfen ob MSXML4 installiert ist (https://www.delphipraxis.net/9618-pruefen-ob-msxml4-installiert-ist.html)

wk_one 30. Sep 2003 11:02


prüfen ob MSXML4 installiert ist
 
Hallo,
ich habe ein kleines Programm das msxml4 verwendet. Bevor das Programm startet wird mit einer Funktion abgefragt ob msxml4 installiert ist.
Die Funktion hatte ich aus diesem Forum:
Delphi-Quellcode:
function msxml4Exists():boolean;
var
  reg :TRegistry;
  s  :String;
begin
  reg:= TRegistry.Create(KEY_READ);
  if (reg<>nil)then
  begin
    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;
end;
Das funktioniert auf Win2000 ganz gut. Wenn das aber unter WinXP läuft dann erhalte ich immer ein false, ob msxml installiert ist oder nicht.
Kann mir jemand weiterhelfen?
Danke

phlux 30. Sep 2003 11:04

Re: prüfen ob MSXML4 installiert ist
 
Pardon :oops:
Muss gleich nmochmal editieren..

Edit2: Versuch doch einfach mit dem Prog nach der .dll zu suchen! Ausserdem ist MS XML4.0 automatisch bei XP drauf.

CalganX 30. Sep 2003 11:11

Re: prüfen ob MSXML4 installiert ist
 
Hi,
das Problem ist, dass unter XP die Wildcard %SYSDIR% verwendet wird. Am Besten änderst du die fileexists-Zeile.

Chris

wk_one 30. Sep 2003 12:59

Re: prüfen ob MSXML4 installiert ist
 
Zitat:

Zitat von phlux
Pardon :oops:
Muss gleich nmochmal editieren..

Edit2: Versuch doch einfach mit dem Prog nach der .dll zu suchen! Ausserdem ist MS XML4.0 automatisch bei XP drauf.

Leider muss das Prog auch auf Win2000 usw. laufen, deshalb kann ich die Abfrage nicht rausnehmen.
Wie meinst Du nach der DLL suchen? In den Systemverzeichnissen? Liegt die DLL immer im selben Verzeichnis?



Zitat:

Zitat von Chakotay1308
Hi,
das Problem ist, dass unter XP die Wildcard %SYSDIR% verwendet wird. Am Besten änderst du die fileexists-Zeile.

Chris

Du meinst die Zeile in der das Ergebins zurückgegeben wird?
Delphi-Quellcode:
Result :=(s<>'') and (FileExists(s));
Was könnte ich da ändern? Wie gesagt den Code habe ich aus diesem Forum. Hab ihn nicht selbst geschrieben.
Und was war mit %SYSDIR%? Sollte ich %SYSDIR%\msxml.dll suchen lassen?

Danke

wk_one 30. Sep 2003 14:18

Re: prüfen ob MSXML4 installiert ist
 
oh.. jetzt sehe ich es. der Pfad steht so in der Registry drin %SystemRoot%\System\msxml.dll

Kann ich nicht auch irgendwo den Wert von %SystemRoot% auslesen?

phlux 30. Sep 2003 14:26

Re: prüfen ob MSXML4 installiert ist
 
Wenn ich mich nicht irre gibt es solche Konstanten in Delphi, die auf das Windows Verzeichnis und auf das System-Verzeichnis hinweisen.

wk_one 2. Okt 2003 12:53

Re: prüfen ob MSXML4 installiert ist
 
Danke euch für die Hinweise. :-D

Falls es jemanden interessiert
so funktioniert es auch unter WinXP:

Delphi-Quellcode:
function msxml4Exists():boolean;
var
  reg :TRegistry;
  s:String;
begin
  reg:= TRegistry.Create(KEY_READ);
  if (reg<>nil)then
  begin
    with reg do try
      RootKey := HKEY_CLASSES_ROOT;
      if (OpenKey('CLSID\'+ GUIDToString(CLASS_DOMDocument40) +'\InProcServer32',false)) then
      try
        s:=ReadString('');
      finally
        CloseKey;
      end;
    finally
      Free;
    end;
  end;

  //---Wenn in der Pfadangabe %SystemRoot% vorkommt (bei WinXP)
  if pos('%SystemRoot%',s)>0 then
  begin
    s:= getSysDir() + ExtractFileName(s);
  end;

  result:=FileExists(s);

end;
Delphi-Quellcode:
function getSysDir():String;
var
  sysdir:String;
begin
  SetLength(sysdir,254);
  GetSystemDirectory(@sysdir[1],length(sysdir));
  //---Da die Zeichenkette nun 255 Zeichen lang ist, existieren NULL Zeichen diese werden in nächter Zeile entfernt
  Delete(sysdir,pos(chr(0),sysdir),length(sysdir)-pos(chr(0),sysdir)+1);
  result :=SysDir+'\';
end;

phlux 2. Okt 2003 18:07

Re: prüfen ob MSXML4 installiert ist
 
Ich denke mal Chris sollte das in seinem Tutorial mit einfügen :)

CalganX 2. Okt 2003 18:52

Re: prüfen ob MSXML4 installiert ist
 
Hi,
mit einer kleinen Änderung und einem kleinem Vermerk zum Autor und drin ist es... ;)

Chris

MathiasSimmack 2. Okt 2003 20:43

Re: prüfen ob MSXML4 installiert ist
 
Zitat:

Zitat von wk_one
Delphi-Quellcode:
function getSysDir():String;
var
  sysdir:String;
begin
  SetLength(sysdir,254);
  GetSystemDirectory(@sysdir[1],length(sysdir));
  //---Da die Zeichenkette nun 255 Zeichen lang ist, existieren NULL Zeichen diese werden in nächter Zeile entfernt
  Delete(sysdir,pos(chr(0),sysdir),length(sysdir)-pos(chr(0),sysdir)+1);
  result :=SysDir+'\';
end;

Was machst´n du da? GetSystemDirectory liefert die Anzahl der kopierten Zeichen zurück, die termininierende Null nicht eingeschlossen. Also:
Delphi-Quellcode:
var
  s : string;
begin
  SetLength(s,MAX_PATH);
  SetLength(s,GetSystemDirectory(@s[1],length(s)));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz