it-swarm.com.de

Directory.Exists funktioniert nicht für einen Netzwerkpfad

Ich habe eine Codezeile, die prüft, ob ein Verzeichnis existiert, und dann die Liste der darin enthaltenen Dateien abrufen.

System.IO.Directory.Exists(@"\\Server\Folder\");

Ich arbeite, wenn ich es teste (von Visual Studio aus ausführen), aber wenn ich die Website bereitstelle, wird immer false zurückgegeben.

Ich mache die gleiche Überprüfung für einen anderen Ordner auf einem anderen Server (sagen wir Server2) und es funktioniert gut.

Ich dachte dann, es sei ein Zugriffsproblem, aber der freigegebene Ordner und das Netzwerk haben Zugriff auf alle Benutzer. Gibt es einen anderen Grund, warum es nicht funktionieren sollte?

23
Amaranth

Wenn Sie den Code in Visual Studio ausführen, wird er unter den Rechten Ihres Benutzers ausgeführt.

Wenn Sie den Code in IIS ausführen, wird er in der Identität des Anwendungspools ausgeführt, der standardmäßig der integrierte Benutzer "Network Service" ist. Hierbei handelt es sich um ein lokales Benutzerkonto, das keinen Zugriff außerhalb des lokalen Computers hat.

Die Rechte für die Netzwerkfreigabe sind die erste Schicht, danach werden die NTFS-Rechte für das Verzeichnis geprüft.

Sie müssen die Identität des Anwendungspools in einen Domänenbenutzer ändern, der die gleichen Rechte wie Ihr Benutzer hat.

20
Shiraz Bhaiji

Ich bin zwar etwas spät dran, aber ich habe festgestellt, dass bei dieser Methode der Directory-Klasse ein Problem vorliegt. Stattdessen habe ich DirectoryInfo mit Identitätswechsel folgendermaßen verwendet:

new DirectoryInfo(path).Exists

Auf diese Weise vermeiden Sie das gesamte Problem der Identitätsänderung, das von unserem IT-Bereich abgelehnt wurde.

Ich hoffe das hilft jemandem!

3
Gonza Oviedo

Für zukünftige Referenzen funktioniert das auch:

bool result = false;
try
{
    Directory.GetAccessControl(path);
    result = true;
}
catch (UnauthorizedAccessException)
{
    result = true;
}
catch
{
    result = false;
}
1

Ich habe diese Fehlermeldung mit einem UNC-Code erhalten, der so aussah:

@ "\ Server01\c $\Data\SubFolder"

Ich habe eine explizite Freigabe gemacht und den c$ losgelassen und so aussehen lassen:

@ "\ Server01\TheData\SubFolder"

und es fing an zu arbeiten.

Ich bin nicht zu 100% sicher, dass dies das Problem der Berechtigungen beseitigt hat, aber es begann sofort nach der Änderung zu arbeiten.

0
Michael Potter