Hallo HEHE Olga,
Mach dich nicht verrückt! Dass du hier hängen bleibst, liegt an einem klassischen .NET-Irrtum: System.IO-Klassen (wie Directory.GetFiles) ignorieren NetworkCredential und CredentialCache komplett. Diese Objekte sind ausschließlich für Web-Protokolle (HTTP/FTP) gedacht.
Wenn du auf einen Windows-Dateiserver (SMB/UNC) zugreifst, verwendet das Betriebssystem auf unterster Ebene immer das Security-Token des aktuell ausführenden Threads, völlig egal, was du davor im Code als Credential-Objekt definierst.
Der "g'scheite Weg" (Die Lösung): Du musst einen echten Identitätswechsel (Impersonation) auf Thread-Ebene durchführen. Der sauberste und effizienteste Weg, ohne hunderte Zeilen komplexer Win32-APIs (LogonUser aus advapi32.dll) selbst zu schreiben, ist das etablierte NuGet-Paket SimpleImpersonation.
So einfach sieht die funktionierende Architektur dann aus(C#):
using System.IO;
using SimpleImpersonation;
// ...
using (Impersonation.LogonUser("DeineDomain", "DeinUser", "DeinPasswort", LogonType.NewCredentials))
{
// Innerhalb dieses Blocks nutzt das Betriebssystem die neuen Berechtigungen!
string[] files = Directory.GetFiles(@"\\Server\Freigabe");
// Mach was mit den Dateien...
}
Vergiss NetworkCredential für Dateipfade. Implementiere diese Impersonation, und die Zugriffsverweigerung ist Geschichte!
Tracy Le.