Authentifizierung an Netzwerkfreigaben via C#
Eine Mail erreichte mich heute, in der ich gefragt wurde, wie man zB. mein Programm easyLiveSync, oder eigene Implementierungen dazu bewegen könnte, auf Netzlaufwerke bzw. Freigaben zuzugreifen, bei denen sich explizit angemeldet werden muss. Ursache aus der Mail war, dass die Synchronisierung von bzw. auf Netzlaufwerke geschehen sollte, diese aber des Öfteren im Explorer als “Getrennt” angezeigt werden, obwohl ein Doppelklick darauf die Verbindung aufbaut. Ebenso, wenn das Laufwerk getrennt ist, wird aus anderen Programmen heraus der Zugriff verweigert.
Ich bin ein Freund von Boardmitteln, wo sie denn sinnvoll und zeiteinsparend sind. Und unter C# und Co. kann man auch die Boardmittel nutzen, um zumindest vorerst eine Verbindung unter Nutzung von Nutzer und Passwort auf eine Freigabe zu erreichen.
Der Befehl unter Windows lautet: net use SERVERNAME\IPC$ /user:USERNAME PASSWORD. Alternativ kann man auch die Freigabe vorher auf ein Laufwerksbuchstaben mappen mittels: net use FreierLaufWerksbuchstabe: \\SERVERNAME\FREIGABE /user:USERNAME PASSWORD. Danach kann man über den neu belegten Laufwerksbuchstaben auf die entfernten Daten zugreifen.
Will man dies nun via C# realisieren, existieren zwar einige Boardmittel, aber mittels eines Sechszeilers geht das Ganze recht einfach von der Hand. Folgender Quellcode-Ausschnitt zeigt dies auf:
ProcessStartInfo psi = new ProcessStartInfo(“net”,”use “ + SERVERNAME + @”\IPC$ /user:” + USERNAME + ” ” + PASSWORD);
Process proc = new Process();
proc.StartInfo = psi; proc.Start();
proc.WaitForExit();
proc.Close();
SERVERNAME, USERNAME und PASSWORD sind in diesem Fall Variablen des Typs string. Danach kann man problemlos den Zugriff via UNC auf die Freigabe des Server realisieren und seine “Dummheiten” mit anstellen. Ebenso ist durch Abänderung der ersten Quellcode-Zeile die Anbindung auf ein Laufwerksbuchstaben möglich:
ProcessStartInfo psi = new ProcessStartInfo(“net“,“use Laufwerk: \\\\“ + SERVERNAME + @“\Freigabe /user:” + USERNAME + ” “ + PASSWORD);
Der Rest sollte dann nach Schema F ablaufen.