2009-04-11 5 views
4

In meinem Code tunFile.Exists im Netzwerk == falsch? i

if (!File.Exists(getSomePath())) 
    { 
     MessageBox.Show("... existing" + " " + getSomePath()); 
     this.Close(); 
    } 

ich sehen kann getSomePath() richtig ist, aber wenn ich die App auf dem Netzwerk öffnen sie sagt, es existieren tut. Wenn ich den Ordner auf mein lokales Laufwerk kopiere, heißt es, dass es existiert.

Was ist los?

+0

Nur eine Mitteilung aus meiner Erfahrung: in dem Fall, dass der Code als Windows-Dienst ausgeführt wird, neben der Konfiguration Sicherheit & Teile, müssen Sie auch ein Anmeldekonto zu Ihrem Dienst machen (in services.msc). Dieses LogOn-Konto sollte sowohl auf Ihrem lokalen Computer als auch auf Ihrem Remote-Computer vorhanden sein und dasselbe Passwort haben. Wenn Sie einen Domänenbenutzer haben, wäre die Sache einfacher: Geben Sie diesem Benutzer nur das Recht, auf beide Systeme zuzugreifen. –

Antwort

1

Sie erwähnen, dass es lokal funktioniert, aber nicht, wenn Sie es von einer Netzwerkfreigabe ausführen. Verfügt Ihre Anwendung über die entsprechenden Sicherheitsberechtigungen für den Zugriff auf das Dateisystem? Standardmäßig haben Anwendungen, die von einer Netzwerkfreigabe ausgeführt werden, reduzierte Sicherheitsberechtigungen.

2
+0

Dies ist meines Erachtens nicht der Fall. – Turnor

+0

was "scheint nicht der Fall zu sein"? –

+0

Wenn Sie eine .NET-Anwendung von einer Netzwerkfreigabe statt von einem lokalen Laufwerk ausführen, wird sie im Sicherheitskontext dieser Freigabe ausgeführt. Dies bedeutet jedoch nicht, dass sich C: \ auf diese Netzwerkfreigabe bezieht. C: \ bezieht sich immer noch auf das lokale Laufwerk. – Turnor

3

Wenn Sie es von einer Netzwerkfreigabe ausführen, dann müssen Sie die Benutzer die kompilierte Assembly hinzufügen haben, wie in der .net vertraut. Der Weg dazu besteht darin, Ihre Assembly "stark zu benennen" und diesen starken Namen auf dem Computer jedes Benutzers zu vertrauen.

Bearbeiten: Der Grund dafür ist für die Sicherheit, so dass ein unachtsamer Benutzer nicht einen Virus, der von einem Remote-Speicherort (Netzwerkfreigabe usw.) ausgeführt wird, erhalten. Dies tritt nur auf, wenn der Benutzer die App ausführt, die sich am Remote-Standort befindet. Er kann von dieser Remote-App aus weder auf Dateifreigaben noch auf sein eigenes lokales System zugreifen.

+0

, aber es scheint b zufällig ... Ich habe einen Service, der für 90% der Dateien im selben Verzeichnis File.exists ist gut, und ich kann sie im Explorer von meinem durchsuchen Maschine .... aber manchmal scheitern bestimmte Erweiterungen. – FlavorScape