Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows Dienst wo ist das Arbeitsverzeichnis? (https://www.delphipraxis.net/103055-windows-dienst-wo-ist-das-arbeitsverzeichnis.html)

TUX_der_Pinguin 9. Nov 2007 09:31


Windows Dienst wo ist das Arbeitsverzeichnis?
 
Ich habe mir einen Windows Dienst geschrieben alles Wunderbar, will ich jedoch eine ini Datei
einlesen mit TIniFile.Create('datei.ini') dann ist das Problem wie sage ich ihm wo die Datei
liegt, klar könnte ich einen Absoluten Pfad angeben aber lieber wäre ein relativer Pfad, ist
es möglich einem Dienst zusagen das sein Arbeitsverzeichnis nicht irgendwo im System liegt sonder
Beispielsweise C:\Programme\MeinDienst\

hathor 9. Nov 2007 11:18

Re: Windows Dienst wo ist das Arbeitsverzeichnis?
 
http://www.delphipraxis.net/internal...=specialfolder

Luckie 9. Nov 2007 11:48

Re: Windows Dienst wo ist das Arbeitsverzeichnis?
 
@harthor: Und welcher Ordner ist jetzt das Arbeitsverzeichnis eines Dienstes? Das war doch die Frage.

Progman 9. Nov 2007 11:52

Re: Windows Dienst wo ist das Arbeitsverzeichnis?
 
ini-Dateien ohne Pfadangaben landen im Windows-Verzeichnis, also bräuchte man sich gar nicht um Pfade kümmern ;)

Zacherl 9. Nov 2007 11:59

Re: Windows Dienst wo ist das Arbeitsverzeichnis?
 
Zitat:

Zitat von TUX_der_Pinguin
das sein Arbeitsverzeichnis nicht irgendwo im System liegt

:P

hathor 9. Nov 2007 12:07

Re: Windows Dienst wo ist das Arbeitsverzeichnis?
 
Zitat:

Zitat von Luckie
@hathor: Und welcher Ordner ist jetzt das Arbeitsverzeichnis eines Dienstes? Das war doch die Frage.

Delphi-Quellcode:
function GetSpecialFolder(hWindow: HWND; Folder: Integer): String;
var
pMalloc: IMalloc;
pidl: PItemIDList;
Path: PChar;
begin
// get IMalloc interface pointer
if (SHGetMalloc(pMalloc) <> S_OK) then
begin
MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.','SHGetMalloc(pMalloc)', 16);
Exit;
end;
// retrieve path
SHGetSpecialFolderLocation(hWindow, Folder, pidl);
GetMem(Path, MAX_PATH);
SHGetPathFromIDList(pidl, Path);
Result := Path;
FreeMem(Path);

// free memory allocated by SHGetSpecialFolderLocation
pMalloc.Free(pidl);
end;

//Mit folgendem Aufruf werden alle Specialfolder angezeigt, die auf DIESEM PC zur Verfügung stehen:
for i := 0 to 64 do Memo1.Lines.add(IntToStr(i)+' : '+ GetSpecialFolder(Form1.Handle,i));
Da kann er sich dann einen aussuchen...

Zacherl 9. Nov 2007 12:10

Re: Windows Dienst wo ist das Arbeitsverzeichnis?
 
Ich denke die Frage ist eher, WIE man das Arbeitsverzeichniss festlegt, nicht wie man es ermittelt.

hathor 9. Nov 2007 12:14

Re: Windows Dienst wo ist das Arbeitsverzeichnis?
 
Zitat:

Zitat von Zacherl
Ich denke die Frage ist eher, WIE man das Arbeitsverzeichniss festlegt, nicht wie man es ermittelt.

Zitat:

Zitat von TUX_der_Pinguin
klar könnte ich einen Absoluten Pfad angeben aber lieber wäre ein relativer Pfad...


TUX_der_Pinguin 9. Nov 2007 12:24

Re: Windows Dienst wo ist das Arbeitsverzeichnis?
 
Das ganze noch mal langsam, der Dienst soll ein paar Informationen aus einer INI Datei einlesen.
Jetzt gibt es zwei möglichkeiten:

1. Relativer Pfad
Delphi-Quellcode:
var
  ini : TIniFile;

begin
  ini := TIniFile.Create(.\einstellungen.ini');
2. Absoluter Pfad
Delphi-Quellcode:
var
  ini : TIniFile;

begin
  ini := TIniFile.Create(C:\Programme\Mein Dienst\einstellungen.ini');

Wenn ich Möglichkeit eins wähle so liegt die ini Datei irgendwo auf C: direkt oder im Windows ordner was auch immer,
was ich aber nicht möchte, meine Frage ist kann ich dem Dienst sagen das das Arbeitsverzeichnis des Dienstes
ein bestimmtes Verzeichnis ist. Wenn ich das Arbeitsverzeichnis des Diensts von C:\windows what ever auf
C:\Programme\MeinDienst\ legen könnte so würden beide oben beschrieben möglichkeiten auf die Gleiche Datei verweisen.

Der ganze Grund für diesen Ansatz liegt daran, das der Dienst nicht auf dem PC laufen soll auf dem er Programmiert wird,
d.h. bei der Entwicklung liegt das arbeitsverzeichnis Beisp. D:\Entwicklung\Mein Dienst\ und von da soll er sich die
INI Datei einlesen. Installiere ich nachher den Dienst auf einem PC soll das Arbeitsverzeichnis unter C:\Programme\Mein Dienst
liegen.

Darauf hin habe ich mich gefragt ob ich einem Dienst sagen kann wo sein Arbeitsverzeichnis liegt oder ist das fest
eingestellt und nicht änderbar?`

So müßte ich solange wie ich entwickel die ini datei irgendwo im system haben bzw. einen absoluten pfad angeben und ihn nachher
ändern. Not falls könnte ich das ja vielleicht über einem Parameter dem Dienst mittleilen wo er suchen soll. Nur eine
Lösung mit dem Arbeitsverzeichnis wäre schöner wenn gleich einfacher.

Ich hoffe jetzt ist klar worum es geht, die ermittlung des Arbeitsverzeichnis ist daher völlig egal.

Progman 9. Nov 2007 12:28

Re: Windows Dienst wo ist das Arbeitsverzeichnis?
 
Delphi-Quellcode:
ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'\einstellungen.ini');
Dann läge die ini immer im Verzeichnis des ausführenden Programms.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 Uhr.
Seite 1 von 2  1 2      

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