Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
...herausfinden, ob eine EXE/DLL im System verfügbar ist?
spacer
Autor Nachricht
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

Beiträge: 7361
Erhaltene Danke: 10
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst: Di 05.08.08 17:40  Antworten mit Zitat Beitrag melden
Wie kann man herausfinden, ob eine bestimmte EXE oder DLL im System verfügbar ist?

Dafür gibt es eine API-Funktion, die z.B. so gekapselt werden könnte:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function FindExecutableImage(FileName: PChar; SymbolPath: PChar; ImageFilePath: PChar): THandle; stdcallexternal 'dbghelp.dll';

function IsExeImageAvailable(const AImageName: String): Boolean;
  const
    MAX_PATH_SIZE = 4095;
  var
    ImageFilePath: String;
    Handle: THandle;
begin
  SetLength(ImageFilePath,MAX_PATH_SIZE);
  // http://msdn.microsoft.com/en-us/library/ms679342(VS.85).aspx
  Handle := FindExecutableImage(PChar(AImageName), PChar(GetEnvironmentVariable('Path')), PChar(ImageFilePath));
  Result := (Handle <> 0);
  if Result then
    CloseHandle(Handle);
end;

Anwendung:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
  const
    MODULE_NAME = 'libmysql.dll';
begin
  if IsExeImageAvailable(MODULE_NAME) then
    ShowMessage(MODULE_NAME+' ist verfügbar.')
  else
    ShowMessage(MODULE_NAME+' ist NICHT verfügbar!');
end;
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Private Nachricht sendenPosting in privater Nachricht zitieren
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 1066
Dabei seit: 13.06.2005


Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Do 07.08.08 10:11  Antworten mit Zitat Beitrag melden
Hallo Narses :wink2:

zu dem reinen Sourcecode kann ich gar nichts schreiben aber was mich interessieren würde: Was genau heißt denn "im System verfügbar"? Wie mache ich denn eine DLL im System "verfügbar"? Und vielleicht kannst du - speziell für mich - kurz erklären in welchen Fällen man deine Funktion gebrauchen könnte. Danke für eine kurze und knappe Antwort. ;-)

Lg, Martin

_________________
Ein Nutzer der Ecke ;-)
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 7361
Erhaltene Danke: 10
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst: Do 07.08.08 11:00  Antworten mit Zitat Beitrag melden
Moin!

Martin1966 hat folgendes geschrieben:
was mich interessieren würde: Was genau heißt denn "im System verfügbar"?
Ich verwende die Path-Environment-Variable, also "über die Systempfade lokalisierbar".

Martin1966 hat folgendes geschrieben:
Wie mache ich denn eine DLL im System "verfügbar"?
Naja, du machst sie nicht verfügbar, sondern ein Binding könnte klappen (statisch oder LoadLibrary). :idea:

Martin1966 hat folgendes geschrieben:
Und vielleicht kannst du - speziell für mich - kurz erklären in welchen Fällen man deine Funktion gebrauchen könnte.
Ich dachte eigentlich, dass mein Beispiel oben schon einen klassischen Fall darstellt :gruebel: offensichtlich nicht :?

Nehmen wir an, du möchtest die "libmysql.dll" statisch oder dynamisch binden. Dazu muss sie im Programm- oder in einem Systempfad liegen. Wenn es statisch nicht klappt, dann gibt´s eh eine Systemfehlermeldung beim Programmstart, klar. Wenn du aber vor dem dynamischen Binden eine qualifizierte Fehlermeldung ausgeben willst, falls das Modul fehlt (z.B. was man denn tun muss oder so), müsstest du erstmal alle Pfade abklappern, um sagen zu können, ob das Modul überhaupt vorhanden ist.

Anderes Beispiel: du willst ein bestimmtes Kommandozeilen-Utility nutzen, sagen wir mal PuTTY.exe. Mit der Funktion könntest du herausfinden, ob ein Aufruf mit relativem Pfad klappen wird oder durch leichte Modifikation sogar den Pfad zum ExeImage erhalten. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Private Nachricht sendenPosting in privater Nachricht zitieren
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 1066
Dabei seit: 13.06.2005


Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Fr 15.08.08 12:38  Antworten mit Zitat Beitrag melden
@Narses: Dank dir für die Erklärung. Ich hatte wohl ein kleines Brett vor den Kopf. Jetzt ist es mir aber klar. ;-) Danke!

_________________
Ein Nutzer der Ecke ;-)
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home