.NET Directory.Exists verweigert die Existenz eines zugeordneten Netzwerklaufwerks, wenn es als Administrator ausgeführt wird

8

Ich schreibe ein kleines .NET-Programm unter Windows 7. Eine Sache, die es zu tun ist, ist die Erstellung symbolischer Links, für die ich Administratorrechte benötige. Es muss auch in der Lage sein, mit zugeordneten Netzlaufwerken zu arbeiten (z. B. R: \, das auf meinem System \titanium\Private\ zugeordnet ist).

Ich verwende Directory.Exists(path) , um zu überprüfen, ob ein Pfad existiert.

Wenn das Programm als normaler Benutzer ausgeführt wird (Administratorkonto, aber nicht "als Administrator"), funktioniert dies auf dem zugeordneten Netzlaufwerk einwandfrei.

Wenn das Programm als Administrator (mit UAC) ausgeführt wird, findet es keine vorhandenen Verzeichnisse. Daher verweigert das Programm die Bestätigung, dass R:\Steam Games\ ein tatsächlich vorhandenes Verzeichnis ist.

Ich bin ein wenig verwirrt darüber, warum das passiert. Die Verwendung des vollständigen UNC-Pfades ( \titanium\Private\Steam Games\ ) funktioniert ebenfalls nicht.

Ist schon mal jemand darauf gestoßen? Gibt es eine gute Problemumgehung? Muss ich die Pfade anders formatieren (beachte: die meisten von ihnen sind momentan mit Path.Combine formatiert, also sollten sie sollten korrekt sein).

Danke für Ihre Hilfe.

( Directory.Exists(@"R:\Steam Games\") gibt als Beispiel false zurück, wenn es als Administrator ausgeführt wird, aber dieser Ordner existiert. Der Funktionsaufruf gibt true zurück, wenn er regelmäßig ausgeführt wird.)

Bearbeiten: Das Problem scheint tatsächlich zu sein, dass ein Administrator technisch ein anderes Benutzerkonto ist. Ich konnte nicht einmal UNC-Pfade verwenden, da ich nur unter meinem normalen Benutzer, nicht unter "Administrator", bei meinem Fileserver angemeldet war. Als eine (relativ hackische) Problemumgehung führe ich einfach mein Programm mit regulären Rechten aus und verwende dann Process.Start , um eine Instanz von cmd.exe mit den Argumenten aufzurufen, um einen symbolischen Link zu erstellen (und Verb "runas", um die UAC-Eingabeaufforderung zu erhalten) .

    
Ethan 23.07.2011, 21:37
quelle

3 Antworten

7

Zugeordnete Laufwerke in Windows sind an einen Benutzerkontext gebunden. Ein Laufwerk, das einem Konto zugeordnet ist: Benutzer A, ist für Benutzer B nicht zugänglich. Sie könnten jedoch denselben Unc-Pfad erstellen, der demselben Laufwerksbuchstaben unter verschiedenen Benutzern zugeordnet ist.

Das Verwenden des vollständigen unc-Pfades sollte jedoch funktionieren.

Weitere Informationen finden Sie unter support.microsoft.com: 1 , 2 .

    
mservidio 23.07.2011, 21:41
quelle
1

Dies wurde hier besprochen. Offenbar in früheren Versionen des .Net-Frameworks In der Dokumentation wurde ausdrücklich erwähnt, dass dies nicht möglich ist ("Die Exists-Methode führt keine Netzwerkauthentifizierung durch. Wenn Sie eine vorhandene Netzwerkfreigabe abfragen, ohne vorab authentifiziert zu sein, gibt die Exists-Methode false zurück."). Die 4.0-Dokumentation enthält diesen Satz nicht mehr, aber das Verhalten hat sich nicht geändert.

Ich habe einen Workaround hier gefunden (aber entschied sich dagegen, es zu benutzen).

    
cdonner 16.08.2011 20:00
quelle
0

Der grundlegende Grund, warum es nicht funktioniert, ist, dass der IIS-Benutzer nicht berechtigt ist, auf den Pfad zuzugreifen. Wenn der Benutzer als normaler Benutzer ausgeführt wird, erhält er den Zugriff. Um dies zu ermöglichen, müssen Sie dem Ordner für IIS eine Berechtigung erteilen Folgen Sie den UNC-Pfaden, um in Diensten zu arbeiten, die von iis ausgeführt werden:

  

Eigenschaften - & gt; Sicherheit - & gt; Bearbeiten - & gt; Hinzufügen - & gt; IIS_WPG

    
moses mathew 23.06.2014 12:16
quelle

Tags und Links