Hallo,
habe bei einem Dienst mal eine Lösung der folgenden Art eingebaut:
Delphi-Quellcode:
function NetzlaufwerkVerbinden(Laufwerk: string;
Pfad: string;
Username: string;
Password: string;
RestoreAtLogon: Boolean) : DWORD;
var
NetResource: TNetResource;
dwFlags: DWORD;
begin
with NetResource do begin
dwType := RESOURCETYPE_DISK;
lpLocalName := PChar(Laufwerk);
lpRemoteName := PChar(Pfad);
lpProvider := nil;
end;
if (RestoreAtLogon) then dwFlags := CONNECT_UPDATE_PROFILE else dwFlags := 0;
Result := WNetAddConnection2(NetResource, PChar(Password), PChar(Username), dwFlags);
end;
function NetzlaufwerkTrennen(Laufwerk : String) : DWord;
begin
Result := WNetCancelConnection(PChar(Laufwerk),true);
end;
Der Aufruf im Dienst kann dann in der folgenden Form erfolgen:
Delphi-Quellcode:
Var
ini : TIniFile;
sFreigabe : String;
sUsername : String;
sPassword : String;
bNetUse : Boolean;
begin
ini := TIniFile.Create(ChangeFileExt(ParamStr(0),'.ini'));
sFreigabe := ini.ReadString('Netzverbindung','Freigabe','');
sUsername := ini.ReadString('Netzverbindung','Username','');
sPassword := ini.ReadString('Netzverbindung','Password','');
// Prüfen, ob die gewünschte Laufwerksverbindung schon existiert.
bNetUse := FileExists('b:\nul');
if Not bNetUse then begin // Wenn nein
bNetUse := NetzlaufwerkVerbinden('b:',sFreigabe,sUsername,sPassword,false) = 0;
Case bNetUse of
true : Logger.Log('Laufwerksverbindung konnte erstellt werden.');
else
Logger.Log('Es konnte keine Laufwerksverbindung nach ' + sFreigabe + ' erstellt werden.');
End;
end else begin
Logger.Log('Es wird die bereits existierende Laufwerksverbindung zu Laufwerk b: genutzt.');
end;
if bNetUse then begin
// Das, was Dein Programm machen soll
...
Hierbei wird davon ausgegangen, dass der Laufwerksbuchstabe B: frei ist und uneingeschränkt für eigene Zwecke genutzt werden kann.
Bei dieser Methode muss der Benutzer, unter dessen Anmeldung der Dienst läuft, keine Rechte im Netz haben. Die für die Laufwerksverbindung erforderlichen Benutzerinformationen werden einer INI-Datei entnommen. Das Verzeichnis mit der Accessdatenbank muss über eine Freigabe verfügen, z. B.: "\\Datenbankrechner\Accessverzeichnis" und es muss einen Benutzer mit für die Arbeit ausreichenden Rechte geben. Freigabe, Benutzer und Passwort sind in der INI-Datei zu hinterlegen.