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.

War es hilfreich?

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top