2012-04-17 5 views
20

Ich habe eine Codezeile, die überprüft, ob ein Verzeichnis existiert und dann die Liste der Dateien darin.Directory.Exists funktioniert nicht für einen Netzwerkpfad

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

ich funktioniert, wenn ich es testen (von Visual Studio ausgeführt wird), aber wenn ich die Website bereitstellen, es gibt immer false zurück.

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 war ein Zugriffsproblem, aber der freigegebene Ordner und Netzwerk haben alle Zugriff auf alle ... Gibt es einen anderen Grund, warum es nicht funktionieren würde?

+6

Das Konto ist, dass IIS läuft unter Zugriff? – Matthew

+0

Kann der Server nicht de-referenziert werden? – David

Antwort

15

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 "Netzwerkdienst" ist. Dies ist ein lokaler Benutzeraccount, der keinen Zugriff außerhalb des lokalen Computers hat.

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

Sie müssen die Identität des Anwendungspools zu einem Domänenbenutzer mit denselben Rechten wie Ihr Benutzer ändern.

+1

Es funktionierte auf meinem lokalen IIS für Tests auch, aber die Einstellung war für die Anwendung Benutzer, so nahm es meine lokalen Windows-Benutzer, um eine Verbindung mit dem Netzwerk. Ich habe meinen spezifischen Benutzer auf den IIS des offiziellen Servers eingestellt und es hat funktioniert. Vielen Dank. – Amaranth

3

Ich bin vielleicht ein wenig spät, aber ich habe festgestellt, dass es ein Problem bei dieser Methode der Directory Klasse gibt. Stattdessen habe ich DirectoryInfo mit Identitätswechseln auf diese Weise verwendet:

new DirectoryInfo(path).Exists 

diese Weise können Sie das ganze Identität ändern Problem vermeiden, die von unserem IT-Bereich verweigert wurde.

Ich hoffe, das hilft jemandem!

+0

Das Problem des Identitätswechsels wird dadurch nicht behoben. Der Hauptunterschied besteht darin, dass 'Directory' eine statische Klasse und' DirectoryInfo' eine Instanz einer Klasse ist. –

1

Für zukünftige Referenzen, funktioniert das auch:

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