Lesen versteckt Anteil in C #
-
02-07-2019 - |
Frage
Also ich habe ein kleines C # -Anwendung, die den Inhalt von Verzeichnissen auf mehreren Rechnern im Netzwerk in regelmäßigen Abständen überprüfen muss. Ich dachte, ich könnte nur lesen \ Hostname \ C $ als Verzeichnispfad, aber mit der normalen Directory-Klasse scheint es keine Möglichkeit zur Authentifizierung gegenüber den anderen Servern, so dass Sie die versteckte Freigabe zugreifen können. Ich bin sicher, es ist eine einfache Möglichkeit, dies zu tun, die ich übersehen habe, aber im Moment bin ich ein bisschen stumpted.
Lösung
http://bytes.com/forum/thread689145.html :
Alle Prozesse im Rahmen eines Laufes angemeldete Benutzer-Account. Wenn du möchtest Öffnen einer Datei auf einem anderen Computer, Ihre Anwendung muss in der ausgeführt werden Kontext eines Benutzers mit Berechtigungen zum Öffnen von Dateien auf dem Computer. Du kannst tut dies mit Identitätswechsel.
Der einfachste Weg zu sein scheint, den aktuellen Benutzer die entsprechenden Rechte auf den anderen Maschinen zu geben.
Andere Tipps
mit einem Anteil zu authentifizieren, zu dem der Benutzer den Prozess ausgeführt hat keine Berechtigung (was oft der Fall ist für administrative Freigaben), versuchen Sie den Befehl net use ausgeführt wird:
net use SERVERNAME\IPC$ /user:USERNAME PASSWORD
Versuchen Sie, diese in einem separaten Prozess vor dem Code ausgeführt wird, die tatsächlich versucht, die Freigabe zuzugreifen, z.
ProcessStartInfo psi = new ProcessStartInfo(
"net", "use " + SERVERNAME + @"\IPC$ /user:" + USERNAME + " " + PASSWORD);
Process p = new Process();
p.StartInfo = psi;
p.Start();
p.WaitForExit();
p.Close();
// The code to access the share follows...
Dies ist nützlich, wenn es nicht angemessen ist, die Erlaubnis, den Anteil für das Benutzerkonto zu geben, den Prozess ausgeführt wird, zum Beispiel für ein Sicherheitsmodell, bei dem eine Endbenutzer-Anwendung auf einem Austausch von Daten zugreifen muss, auf die der Benutzer selbst keinen direkten Zugriff haben sollte.
Sind Sie nach einer Möglichkeit, die aktuellen Benutzer zur Laufzeit zu setzen?
Wenn nicht, solange der Benutzer den Prozess hat Zugriff auf diesen Maschinen ausgeführt werden, wird dies für Sie arbeiten:
DirectoryInfo di = new DirectoryInfo(@"\\machineName\c$\temp");
FileInfo[] files = di.GetFiles();
foreach (FileInfo f in files)
{
Debug.WriteLine(f.Name);
}