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.

 

Das könnte Dich auch interessieren...

2 Antworten

  1. Artanis sagt:

    Öhm… das ist aber auch käsig…
    Bietet C# denn keine API an, um Zugriffe auf Netzlaufwerke zu realisieren? Solche Aufrufe externer Programme sollte man tunlichst vermeiden, da die nicht auf jedem System unbedingt identisch sein bzw. reagieren müssen. Zugegeben, im Falle von ’net‘ eher unwahrscheinlich, aber das ist durchaus auch eine Stilfrage.

    • FireFox sagt:

      Man kann mit Sicherheit mit Credentials arbeiten. Die Frage ist, welchen Aufwand man sich mit der ganzen Geschichte für ein mitunter geartetes Privatprojekt an die Backe nagelt. On the fly ist mir eine genaue Möglichkeit der Authentifizierung nicht geläufig. Auch eine Suche im Netz der Netze verläuft meist im Sande, denn entweder wird das Ganze nicht benötigt oder aber es hat bisher kaum einer herausgefunden, denn die paar Anfragen bezogen sich wenn dann nur auf Auflistung von Shares, welche im Rechner gemounted sind …. Die Methode hier funktioniert zumindest von XP über Vista zu Windows 7. Windows 2000 sollte auch abgedeckt sein.
      Schön ist das nicht – da stimme ich dir zu, aber zweckmäßig, meiner Ansicht nach, als Workaround auf jeden Fall.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.