Guten morgen Forum,
Gleich nach den Feiertagen klagt mich folgendes Problem: Ich habe einen Service programmiert, welcher ,um es einfach ausgedrückt, bestimmte Aufgaben zu bestimmten Zeitpunkten ausführt. Damit der Service auch in anderen Projekten relativ simpel benutzt werden kann, läd sich der Service die Prozeduren dynamisch aus
DLL´s, deren Pfade in einer
XML-Datei hinterlegt sind.
Der Service wird bereits beim Kunden eingesetzt und arbeitet zufriedenstellend! Nun habe ich einen neuen Job, also eine neue
DLL programmiert, die zur Arbeit ein Netzlaufwerk erstellen muss. Das realisiere ich folgendermaßen:
Delphi-Quellcode:
library MyDLL;
var
//Variablen
Password:
String;
{ Funktion zum Ausführen }
function Run: PChar;
stdcall;
export;
var
Error: Integer;
Msg:
String;
begin
Error := 0;
Msg := '
';
try
if CheckConnection(Msg)
then
begin
//Mach etwas
end else
Error := 1;
except
on e:
exception do
Msg := e.
Message;
end;
Result := PChar('
['+IntToStr(Error)+'
]['+Msg+'
]');
end;
{ Überprüft die Netzlaufwerkverbindung }
function CheckConnection(
var AMsg:
String): Boolean;
begin
Result := false;
try
If FileExists(Filepath+'
\'+Filename)
then
Result := true
else
begin
WNetCancelConnection2(PChar(DriveChar), 0, True);
If NetzlaufwerkVerbinden(DriveChar,Filepath,Username,Password,false) = 0
then
begin
If FileExists(Filepath+'
\'+Filename)
then
Result := true
else
AMsg := AMsg + Filename + '
kann nicht gefunden werden; ';
end else
begin
AMsg := AMsg + '
Verbindung zu Netzlaufwerk fehlgeschlagen; ';
Result := False;
end;
end;
except
Result := false;
end;
end;
{ Erstellt eine Verbindung zu einem Netzlaufwerk }
function NetzlaufwerkVerbinden(ALaufwerk:
string; APfad:
string;
AUsername:
string; APassword:
string; ARestoreAtLogon: Boolean): DWORD;
var
NetResource: TNetResource;
dwFlags: DWORD;
begin
with NetResource
do
begin
dwType := RESOURCETYPE_DISK;
lpLocalName := PChar(ALaufwerk);
lpRemoteName := PChar(APfad);
lpProvider :=
nil;
end;
if (ARestoreAtLogon)
then
dwFlags := CONNECT_UPDATE_PROFILE
else
dwFlags := 0;
Result := WNetAddConnection2(NetResource, PChar(APassword),
PChar(AUsername), dwFlags);
end;
Das funktioniert soweit auch gut. Möchte ich jedoch diesen Job auf zwei unterschiedliche Netzwerkstandorte anwenden scheint ein Job sich beim Verbinden des Netzwerklaufwerkes abzuschießen. Leider ist das dank des Services und der
DLL nicht so leicht zu debuggen!
Habt ihr eine Idee?