Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Statisch eingebundenen DLLs in "privatem" Verzeichnis (https://www.delphipraxis.net/151117-statisch-eingebundenen-dlls-privatem-verzeichnis.html)

uligerhardt 6. Mai 2010 11:20


Statisch eingebundenen DLLs in "privatem" Verzeich
 
Wir haben eine kleine "Suite" von Programmen, die in verschiedenen Unterverzeichnissen eines gemeinsamen Verzeichnisses leben. Diese Programme benutzen gemeinsam ein paar DLLs. Nun stellt sich die Frage: Wo sollen die DLLs hin?
  • Ein Programmverzeichnis, in das ich sie legen könnte, gibt es nicht.
  • Ich könnte sie dem Benutzer nach system32 oder so installieren. Das würde ich gerne vermeiden.
  • Ich könnte sie in das "Wurzelverzeichnis" unserer Suite (oder ein Unterverzeichnis davon) packen. Dann müsste ich aber den Suchpfad des Systems anpassen (oder?), was ich auch lieber vermeiden würde.
Hat jemand Ideen dazu?

Uli.

himitsu 6. Mai 2010 11:24

Re: Statisch eingebundenen DLLs in "privatem" Verz
 
Wenn du die DLLs dynamisch lädst, dann könntest du sehr leicht einen Pfad mit angeben,

ansonsten einfach mal versuchen was passiert, wenn du einen relativen Pfad, bei den statischen Links, mit angibst.

PS: kennst du den Ordner C:\Programme\Gemeinsame Dateien ?
Dort einfach Unterverzeichnis für deine Suit anlegen.

[add]
http://msdn.microsoft.com/de-de/library/7d83bc18.aspx

> Die in der PATH-Umgebungsvariablen aufgeführten Verzeichnisse.

uligerhardt 6. Mai 2010 11:37

Re: Statisch eingebundenen DLLs in "privatem" Verz
 
Zitat:

Zitat von himitsu
Wenn du die DLLs dynamisch lädst, dann könntest du sehr leicht einen Pfad mit angeben,

ansonsten einfach mal versuchen was passiert, wenn du einen relativen Pfad, bei den statischen Links, mit angibst.

Ich vergaß zu erwähnen: Es handelt sich um Third-Party-Komponenten, die die DLLs statisch und ohne Pfadangabe beim external einbinden. Außerdem kann der Pfad sich ja je nach Programm ändern: Tool 1 z.B. liegt in einem Unterverzeichnis und bräuchte
Delphi-Quellcode:
... external '..\Common\SomeLib.dll'
, Tool 2 hingegen bräuchte
Delphi-Quellcode:
... external '.\Common\SomeLib.dll'
, weil es direkt im Wurzelverzeichnis liegt.

Zitat:

Zitat von himitsu
PS: kennst du den Ordner C:\Programme\Gemeinsame Dateien ?
Dort einfach Unterverzeichnis für deine Suit anlegen.

Jo, aber dann müsste ich den Suchpfad anpassen, was ich vermeiden möchte. Bisher kommen wir nämlich mit xcopy-Installation aus.

Zitat:

Zitat von himitsu
[add]
http://msdn.microsoft.com/de-de/library/7d83bc18.aspx

> Die in der PATH-Umgebungsvariablen aufgeführten Verzeichnisse.

Ist der Link OK? Geht bei mir nämlich nicht (Page Error).

blackfin 6. Mai 2010 11:40

Re: Statisch eingebundenen DLLs in "privatem" Verz
 
Du kannst den Programm-spezifischen DLL-Suchpfad deinen Programmen auch über die Registry mitteilen:

Erzeuge einfach unter
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\App Paths\
einen neuen Schlüssel mit dem Exe-Namen deines Programms und innerhalb des Schlüssels
eine neue Zeichenfolge "Path" und als Inhalt die Semikolon-getrennten Suchpfade für dlls.


Beispiel:

Deine DLL's liegen unter
"C:\Programme\MeineProgramme\DLL\"

Programm 1 heisst ProgrammEins.exe
Installiert ist es in "C:\Programme\MeineProgramme\Prog_1\"

Programm 2 heisst ProgrammZwei.exe
Installiert ist es in "C:\Programme\MeineProgramme\Prog_2\"

Jetzt trägst du im oben genannten Key diese Schlüssel ein:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\App Paths\ProgrammEins.exe\
Innerhalb des Schlüssels eine neue Zeichenfolge "Path" mit dem Inhalt "C:\Programme\MeineProgramme\Prog_1\;C:\Programme\ MeineProgramme\DLL\"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\App Paths\ProgrammZwei.exe\
Innerhalb des Schlüssels eine neue Zeichenfolge "Path" mit dem Inhalt "C:\Programme\MeineProgramme\Prog_2\;C:\Programme\ MeineProgramme\DLL\"

Damit sucht das Programm beim Starten automatisch nach den statisch gelinkten DLL's zuerst im eigenen Programm-Pfad und in deinem DLL-Verzeichnis.

EDIT:

Den Schlüssel gibt es auch für HKEY_CURRENT_USER, wenn das Programm nur für einen User installiert ist.

QuickAndDirty 6. Mai 2010 11:42

Re: Statisch eingebundenen DLLs in "privatem" Verz
 
JA der ist OK

uligerhardt 6. Mai 2010 12:27

Re: Statisch eingebundenen DLLs in "privatem" Verz
 
Zitat:

Zitat von QuickAndDirty
JA der ist OK

Hmmm. Ich krieg den hier:
Zitat:

Zitat von MSDN: Page Error
Sorry, we were unable to service your request.

Ich probier's halt später nochmal.

Edit: Boah, Stoff für Verschwörungstheorien! In meinem Firefox 3.6.3 kommt bei normalem Klick oder pasten der URL in die Adressleiste der Page Error. Mach ich ne neue Seite auf, stelle auf IE-Tab und paste die URL dann, dann klappt's.
Und http://msdn.microsoft.com/en-us/library/7d83bc18.aspx klappt auch ohne Umstände im Firefox (EN statt DE!). Weiß jemand, ob man diese automatische Übersetzerei im MSDN ein für allemal abstellen kann? Die nervt mich eh schon lange.

uligerhardt 6. Mai 2010 12:32

Re: Statisch eingebundenen DLLs in "privatem" Verz
 
Zitat:

Zitat von blackfin
Du kannst den Programm-spezifischen DLL-Suchpfad deinen Programmen auch über die Registry mitteilen:

Erzeuge einfach unter
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\App Paths\
einen neuen Schlüssel mit dem Exe-Namen deines Programms und innerhalb des Schlüssels
eine neue Zeichenfolge "Path" und als Inhalt die Semikolon-getrennten Suchpfade für dlls.

OK, das gefällt mir schon ganz gut. :mrgreen:

Und Allen Danke für die Antworten bisher!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 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