Autor Beitrag
del1312
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: Di 26.02.13 13:46 
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:

ausblenden 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 27.02.13 00:04 
Moin!

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

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: 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.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
del1312 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: Mo 30.06.14 13:39 
... Danke! :)

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

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

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


Jetzt klappt es! :wink:
Lakeri
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 17.07.14 11:47 
Hmm, wieso darf man denn als Benutzernamen keinen Leerstring einsetzen... Das ist ja auch merkwürdig!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.