Entwickler-Ecke

Internet / Netzwerk - Netzlaufwerk verbinden


del1312 - Di 26.02.13 13:46
Titel: Netzlaufwerk verbinden
Hallo Leute,

ich wollte gerne mit einer kleinen App 3 Netzlaufwerke per Klick verbinden. So sieht das momentan bei mir aus.
Das komische ist, er verbindet alles 3 Laufwerke auf dem Rechner wo Delphi installiert ist, bei alle anderen Rechnern
wird nur das erste Laufwerk verbunden, die anderen nicht. Hat einer ne Idee?

Diese Funktion nutze ich:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
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;



Hiermit löse ich es per Button aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button1Click(Sender: TObject);
begin
if edit1.Text='kennwort' then
   begin
      NetzlaufwerkVerbinden('m:''\\srv\user''username''meinkennwort', False);
      NetzlaufwerkVerbinden('n:''\\srv\all''username''meinkennwort', False);
      NetzlaufwerkVerbinden('u:''\\srv\austausch''username''meinkennwort', False);
end
else
ShowMessage('Kennwort falsch!');
Edit1.Text:='';
end;


Narses - Mi 27.02.13 00:04

Moin!

Klassisch: Was sagt denn der ReturnCode, wo das Problem liegt? :zwinker:

cu
Narses


Tranx - Mi 27.02.13 05:17

Bei der Netzlaufwerkverbindung per Batch muss ich erst das zu verbindende Laufwerk trennen, wenn es verbunden war, denn ansonsten funktioniert das Verbinden nicht ohne Fehler.

Vielleicht versucht Du mal die Verbindung per Batch und siehst, welchen Fehler Dir das System anzeigt.


del1312 - Mi 27.02.13 09:00

Also ich hab jetzt das Problem gefunden. Bei Netzlaufwerk 2 und 3 hab ich einfach Benutzer und Kennwort leer gelassen. Nun läuft es durch und verbindet alle Netzlaufwerke.
Danke für eure Tipps.


Crowbar - Mo 30.06.14 12:46

Dieser Thread ist zwar schon "etwas" älter ... aber ich habe dazu eine Frage.

Für den oben angegebenen Code benötigt man den Benutzer und das Kennwort.
Wenn ich jedoch in der CMD-Umgebung "net use x: \\MeinPC\MeineFreigabe" eingebe, benötige ich dies nicht.
Was macht "net use" anders?
Gibt es einen Funktionsaufruf ohne zwingender Eingabe von Benutzer und Kennwort (ähnlich "net use")?

Hintergrund:
Ich möchte in meinem Programm die Möglichkeit schaffen, lokale Verzeichnisse auch in UNC-Pfad eingeben zu können.
(Natürlich vorausgesetzt, die Freigabe existiert auch.)
Mein Programm soll dann autom. den angegebenen UNC-Pfad mappen und dafür einen freien Laufwerksbuchstaben verwenden.

Grüße


baumina - Mo 30.06.14 13:07

Also bei mir steht in der Hilfe zu WNetAddConnection, WNetAddConnection2 und WNetAddConnection3
Zitat:

If lpUserName is NULL, the function uses the default user name. (The user context for the process provides the default user name.)

The lpUserName parameter is specified when users want to connect to a network resource for which they have been assigned a user name or account other than the default user name or account.

If lpPassword is NULL, the function uses the current default password associated with the user specified by the lpUserName parameter.

If lpPassword points to an empty string, the function does not use a password.



Crowbar - Mo 30.06.14 13:39

... Danke! :)

Mein Fehler war ... ich darf als Benutzername und Passwort keinen "Leerstring", sondern muss "nil" verwenden.

falsch:

Delphi-Quelltext
1:
2:
3:
...
Result:=WNetAddConnection2(NetResource,PWideChar(''),PWideChar(''),dwFlags);
...

richtig:

Delphi-Quelltext
1:
2:
3:
...
Result:=WNetAddConnection2(NetResource,nil,nil,dwFlags);
...


Jetzt klappt es! :wink:


Lakeri - Do 17.07.14 11:47

Hmm, wieso darf man denn als Benutzernamen keinen Leerstring einsetzen... Das ist ja auch merkwürdig!


jaenicke - Fr 18.07.14 14:12

Weil es so definiert ist. :nixweiss:

Wenn man etwas angibt, wird das als Benutzername angenommen, egal was drin ist (ein Leerstring). Will man keinen Benutzer angeben, muss man auch nichts übergeben, sprich nil.