AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi prüfen ob MSXML4 installiert ist
Thema durchsuchen
Ansicht
Themen-Optionen

prüfen ob MSXML4 installiert ist

Ein Thema von wk_one · begonnen am 30. Sep 2003 · letzter Beitrag vom 8. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2      
wk_one

Registriert seit: 19. Mai 2003
26 Beiträge
 
Delphi 7 Professional
 
#1

prüfen ob MSXML4 installiert ist

  Alt 30. Sep 2003, 12:02
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
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#2

Re: prüfen ob MSXML4 installiert ist

  Alt 30. Sep 2003, 12:04
Pardon
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.
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: prüfen ob MSXML4 installiert ist

  Alt 30. Sep 2003, 12:11
Hi,
das Problem ist, dass unter XP die Wildcard %SYSDIR% verwendet wird. Am Besten änderst du die fileexists-Zeile.

Chris
  Mit Zitat antworten Zitat
wk_one

Registriert seit: 19. Mai 2003
26 Beiträge
 
Delphi 7 Professional
 
#4

Re: prüfen ob MSXML4 installiert ist

  Alt 30. Sep 2003, 13:59
Zitat von phlux:
Pardon
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 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?
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
  Mit Zitat antworten Zitat
wk_one

Registriert seit: 19. Mai 2003
26 Beiträge
 
Delphi 7 Professional
 
#5

Re: prüfen ob MSXML4 installiert ist

  Alt 30. Sep 2003, 15:18
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?
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#6

Re: prüfen ob MSXML4 installiert ist

  Alt 30. Sep 2003, 15:26
Wenn ich mich nicht irre gibt es solche Konstanten in Delphi, die auf das Windows Verzeichnis und auf das System-Verzeichnis hinweisen.
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
wk_one

Registriert seit: 19. Mai 2003
26 Beiträge
 
Delphi 7 Professional
 
#7

Re: prüfen ob MSXML4 installiert ist

  Alt 2. Okt 2003, 13:53
Danke euch für die Hinweise.

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;
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#8

Re: prüfen ob MSXML4 installiert ist

  Alt 2. Okt 2003, 19:07
Ich denke mal Chris sollte das in seinem Tutorial mit einfügen
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: prüfen ob MSXML4 installiert ist

  Alt 2. Okt 2003, 19:52
Hi,
mit einer kleinen Änderung und einem kleinem Vermerk zum Autor und drin ist es...

Chris
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#10

Re: prüfen ob MSXML4 installiert ist

  Alt 2. Okt 2003, 21:43
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 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