AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

msxml deinstallieren

Ein Thema von xml99 · begonnen am 2. Feb 2005 · letzter Beitrag vom 4. Feb 2005
 
MathiasSimmack
(Gast)

n/a Beiträge
 
#4

Re: msxml deinstallieren

  Alt 2. Feb 2005, 21:31
Ich persönlich prüfe die Existenz von MS-XML mit einer speziellen Funktion gleich zu Beginn. Wird nicht die erwartete Version gefunden, beendet sich das Programm. Bei einem VCL-Projekt ist diese Funktion am besten im Projektquelltext (*.dpr) aufgehoben, noch bevor die ersten Forms geladen werden. In der DP treibt sich noch eine Funktion [dp]"DoesXmlExist"[/dp] rum (auch von mir), aber mittlerweile benutze ich die hier:
Delphi-Quellcode:
function DoesObjectExist(const ClassID: TGUID): boolean;

  function GuidToString(const ClassID: TGUID): string;
  var
    p : PWideChar;
  begin
    Result := '';

    if(Succeeded(StringFromCLSID(ClassID,p))) then
    begin
      Result := p;
      CoTaskMemFree(p);
    end;
  end;

  function ExpandEnvStr(const szInput: string): string;
  const
    MAXSIZE = 32768;
  begin
    SetLength(Result,MAXSIZE);
    SetLength(Result,ExpandEnvironmentStrings(pchar(szInput),
      @Result[1],length(Result)));
  end;

var
  reg : HKEY;
  dwType,
  dwLen : dword;
  s : string;
begin
  Result := false;

  if(RegOpenKeyEx(HKEY_CLASSES_ROOT,pchar('CLSID\' +
    GuidToString(ClassID) + '\InProcServer32'),
    0,KEY_READ,reg) = ERROR_SUCCESS) then
  try
    dwType := REG_NONE;
    dwLen := 0;

    if(RegQueryValueEx(reg,nil,nil,@dwType,nil,@dwLen) = ERROR_SUCCESS) and
      (dwType in [REG_SZ,REG_EXPAND_SZ]) and
      (dwLen > 0) then
    begin
      SetLength(s,dwLen);

      if(RegQueryValueEx(reg,nil,nil,@dwType,@s[1],@dwLen) = ERROR_SUCCESS) then
        SetLength(s,dwLen-1)
      else
        s := '';

      Result := (s <> '') and
        (fileexists(ExpandEnvStr(s)));
    end;
  finally
    RegCloseKey(reg);
  end;
end;
weil sie flexibler ist und nicht nur nach XML suchen kann. Aber für XML 4 würde es so aussehen:
Delphi-Quellcode:
  if(not DoesObjectExist(CLASS_DOMDocument40)) then
  begin
    MessageBox(0,'XML 3 wird benötigt.',nil,MB_OK or MB_ICONEXCLAMATION);
    exit;
  end;
Wie gesagt, klappt nicht nur bei XML. Auch beim Help 2.0-Environment
Delphi-Quellcode:
  if(not DoesObjectExist(CLASS_HxSession)) then
    Halt(3);
  Mit Zitat antworten Zitat
 


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 00:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz