Seite 1 von 1

Prüfen ob DLL bzw. ander Dateien vorhanden sind?

Verfasst: 21.03.2007 03:16
von Aspirant
Hallo,

Ich suche eine Möglichkeit ob in *.dll im systempfad vorhanden ist
bzw ob Programm *.exe bereits Installiert ist (nicht nur standard Pfad)

Also Hilfe und suche habe ich benutzt

Ich danke für helfende Antworten





PS. nur mal ne info Frage wie kann ist das Laden der Libmysql.dll beschleunigen

Verfasst: 21.03.2007 10:49
von uweb
Lassen wir das mit dem Duell mal und gehen lieber bei Gelegenheit einen Trinken.

Ich finde es gut, daß Du die Hilfe und die Suche schon konsultiert hast. Vermutlich lag es an den Suchbegriffen.
Mit "Durchsuchen" bzw "Systemordner" wärst Du schon weiter gekommen.

Zum Suchen habe ich folgendes für Dich geschrieben :

Code: Alles auswählen

Procedure GibtEsDirectoryeintrag (Pfad.s, SollName.s, SollExtension.s, SollTyp)
;Prüft die Existens eines Directoryeintrags
; Pfad.s z.B. "c:\"
; SollName.s z.B. "autoexec"
; SollExtension.s z.B. "bat"
; SollTyp 
;  entweder : #PB_DirectoryEntry_File
;  oder     : #PB_DirectoryEntry_Directory
; Diese Lösung ist nicht optimal aber so (hoffentlich) leicht zu verstehen

  If ExamineDirectory(0, Pfad.s, "*.*")
    Ergebnis = 0
    SollName.s = LCase(SollName.s)
    SollExtension.s = LCase(SollExtension.s)
    Repeat
     
      Typ = NextDirectoryEntry(0)
      If Typ = SollTyp
        Eintrag.s = LCase(DirectoryEntryName(0))
        If Eintrag
          Extension.s = GetExtensionPart(Eintrag)
          If Extension
            Name.s = Left(Eintrag.s, Len(Eintrag.s)-Len(Extension.s)-1) ; -1 wegen dem Punkt
            If (Name.s = SollName.s Or SollName.s = "*") And (Extension = SollExtension.s Or SollExtension.s = "*")
              ProcedureReturn #True
            EndIf
          EndIf
        EndIf
      EndIf
    Until Ergebnis Or Typ = 0
  EndIf
  ProcedureReturn #False
EndProcedure

Eine von vielen Lösungen um einen Verzeichnisbaum rekursiv (http://de.wikipedia.org/wiki/Rekursiv)durchzugehen gibt es unter http://www.purebasic.fr/german/viewtopic.php?t=7354.
Eine andere wäre z.B. http://www.purebasic.fr/german/viewtopic.php?t=7263


Unter http://www.purebasic.fr/german/viewtopic.php?t=767 (solltest Du durchlesen) habe ich u.a. folgendes gefunden :

Code: Alles auswählen

Structure EMID
  cb.b
  abID.b[1]
EndStructure

; Structure ITEMIDLIST
;   mkid.EMID
; EndStructure
; Die Struktur ist bei mir bereits definiert

Procedure.s GetSpecialeFolder(folder.l)
  *itemid.ITEMIDLIST = #NULL
  If SHGetSpecialFolderLocation_ (0, folder, @*itemid) = #NOERROR
    location.s = Space (#MAX_PATH)
    If SHGetPathFromIDList_ (*itemid, @location)
      If Right(location, 1) <> "\" : location + "\" : EndIf
      ProcedureReturn location
    EndIf
  EndIf
EndProcedure

Unter http://www.vbapihelpline.de/ref/funca.p ... h&Letter=s gibt es eine deutsche Auflistung der nötigen Konstanten (die sollten in PB schon definiert sein). Du brauchst also nur die beiden oberen Codeblöcke und z.B. folgendes in eine Datei kopieren.

Code: Alles auswählen

Pfad.s = GetSpecialeFolder(#CSIDL_WINDOWS) ;(nur IE ab version 5.0) Ermittelt das Verzeichnis "Windows"
Debug GibtEsDirectoryeintrag (Pfad.s, "explorer", "exe", #PB_DirectoryEntry_File)
Debug GibtEsDirectoryeintrag (Pfad.s, "*", "exe", #PB_DirectoryEntry_File)
Debug GibtEsDirectoryeintrag (Pfad.s, "explorer", "*", #PB_DirectoryEntry_File)
Debug GibtEsDirectoryeintrag (Pfad.s, "Explorer", "exe", #PB_DirectoryEntry_File)
PS
Bitte beachte, dass Du damit immer nur bestimmte Verzeichnisse durchsuchst. In der Praxis könnte der Pfad aber sowohl "C:\Programme\WinzigWeich\BlaBla\" als auch "C:\Programme\BlaBla\" sein. Zum Teil lautet er sogar "C:\PROGRAM FILES\...". Deshalb gibt es die Möglichkeit den tatsächlichen Pfad in der Registry einzutragen. Eine Prüfung ob die Datei tatsächlich existiert erübrigt sich dadurch nicht.

Verfasst: 21.03.2007 11:08
von Aspirant
Guten Morgen uweb,
ich danke dir erstmal für dein Codebeispiele das ist schon sehr viel wert. Ich hatte nicht mal sowas Ansatzweise gefunden.

Es ist mir durchaus klar das der Richtig suchbegriff das mass der dinge des wegen habe ich ja auch verschieden versucht. Doch meine Gedanke gänge waren leider nicht die der Breiten masse um das Problem zulösen, weswegen ich nachgefragt habe und eine sehr Brauchbare Antwort bekamm

Danke

werde jetzt erstmal weiter Basteln und mein Problem hoffentlich lösen könne

MFG Aspirant

Verfasst: 21.03.2007 11:19
von uweb
Gerne geschehen !
Morgen hilfst Du vielleicht einem Anderen und der Kreis schließt sich.
Übrigens brauchst Du die Struktur "EMID" gar nicht.

Verfasst: 21.03.2007 13:14
von ts-soft
>> Pfad.s = GetSpecialeFolder(#CSIDL_WINDOWS) ;(nur IE ab version 5.0) Ermittelt das Verzeichnis "Windows"
Gerade dafür sollte man GetSpecialeFolder nicht nehmen, (wegen IE Version)

Code: Alles auswählen

Define WinPath.s{#MAX_PATH}
GetWindowsDirectory_(@WinPath, #MAX_PATH)
If WinPath <> "" 
  If Right(WinPath, 1) <> "\" : WinPath + "\" : EndIf
EndIf
Debug WinPath

Define SysPath.s{#MAX_PATH}
GetSystemDirectory_(@SysPath, #MAX_PATH)
If SysPath <> "" 
  If Right(SysPath, 1) <> "\" : SysPath + "\" : EndIf
EndIf
Debug SysPath
Gruß
Thomas