Delphi-PRAXiS

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;

wk_one 6. Okt 2003 07:51

Re: prüfen ob MSXML4 installiert ist
 
Zitat:

Zitat von MathiasSimmack
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;

:oops: ähh....hä hä....
Stimmt dein Vorschlag ist doch um Welten einfacher.

Danke

Akut-Programming 8. Okt 2003 08:44

Re: prüfen ob MSXML4 installiert ist
 
Dieses Problem habe ich beim NSIS Script. Unter XP meint er immer, das es nicht installiert sei, aber es ist installiert. Nach welchem Schlüssel muss ich für XP die Reg abfragen, wenn ich schon beim Installer machen will? Der oben genannte???

Greetz und thx schonma,

wk_one 8. Okt 2003 09:19

Re: prüfen ob MSXML4 installiert ist
 
Zitat:

Zitat von Akut-Programming
Dieses Problem habe ich beim NSIS Script. Unter XP meint er immer, das es nicht installiert sei, aber es ist installiert. Nach welchem Schlüssel muss ich für XP die Reg abfragen, wenn ich schon beim Installer machen will? Der oben genannte???

Greetz und thx schonma,

Also wenn ich mir das anzeigen lasse:
Delphi-Quellcode:
GUIDToString(CLASS_DOMDocument40)
Erhalte ich das:
Delphi-Quellcode:
{88D969C0-F192-11D4-A65F-0040963251E5}
folglich müsste der Key also lauten:
Delphi-Quellcode:
CLSID\{88D969C0-F192-11D4-A65F-0040963251E5}
Dieser befindet sich in HKEY_CLASSES_ROOT

Leider ist das nur eine Vermutung. Bin selbst noch'n Neuling.:oops:

Ich weiß nicht ob dieser Key{88D96...usw...} für jede Installation gleich ist oder ob dieser auf jedem Rechner anderst aussieht.
Hab den Key auf zwei Rechnern verglichen und beide waren gleich.
Also gehe ich mal davon aus, dass dieser Key immer gleich ist und du in dem Script danach suchen kannst.

Akut-Programming 8. Okt 2003 09:29

Re: prüfen ob MSXML4 installiert ist
 
Hey danke :thuimb: , werd ich dann gleich mal ins Script einbauen.

MathiasSimmack 8. Okt 2003 10:22

Re: prüfen ob MSXML4 installiert ist
 
Dabei fällt mir ein, @Chakotay: das fehlt im MO-Skript ja noch ... :oops: ... muss dir wohl noch mal ein aktuelles Script zukommen lassen ... Fällt das schon unter Spam, oder kann man das noch als "exzessives Bugfixing" durchgehen lassen? :wink:

CalganX 8. Okt 2003 10:29

Re: prüfen ob MSXML4 installiert ist
 
Hi,
@Mathias: ach... das passt schon. So lange sie keine .exe-Dateianhänge dran sind (Spamihilator filtert die inzwischen) und nicht größer als 100KB, dann passt das. :)

Danke,
Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr.

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