Comment puis-je accéder à un lecteur réseau mappé avec System.IO.DirectoryInfo?

J’ai besoin de créer un répertoire sur un lecteur réseau mappé. J’utilise un code:

DirectoryInfo targetDirectory = new DirectoryInfo(path); if (targetDirectory != null) { targetDirectory.Create(); } 

Si je spécifie le chemin comme “\\\\ NomServeur \\ Répertoire”, tout se passera bien. Si je mappe le “\\ NomServeur \ Répertoire” en tant que, disons lecteur Z:, et spécifie le chemin comme “Z: \\”, cela échoue.

Après la création de l’object targetDirectory, VS indique (en mode débogage) que targetDirectory.Exists = false et tente de le faire avec targetDirectory.Create () lève une exception:

 System.IO.DirectoryNotFoundException: "Could not find a part of the path 'Z:\'." 

Cependant, le même code fonctionne bien avec les répertoires locaux, par exemple C :.

L’application est un service Windows (WinXP Pro, SP2, .NET 2) s’exécutant sous le même compte que l’utilisateur ayant mappé le lecteur. Qwinsta répond que la session de l’utilisateur est la session 0, il s’agit donc de la même session que celle du service.

Les lecteurs réseau mappés sont spécifiques à l’utilisateur. Par conséquent, si l’application s’exécute sous une identité différente de celle de l’utilisateur qui a créé la lettre de lecteur mappé (z :), cela ne fonctionnera pas.

En raison du fait que les lettres de lecteur mappées ne fonctionnent pas, la solution simple consiste à taper le chemin d’access réseau complet.

Alias,

mon lecteur R:/ été mappé sur \\myserver\files\myapp\

Donc, au lieu d’ utiliser

"R:/" + "photos"

utilisation

"\\myserver\files\myapp\" + "photos"

Le compte sous lequel votre application est exécutée n’a probablement pas access au lecteur mappé. S’il s’agissait d’une application Web, le problème serait résolu … Par défaut, une application Web s’exécute sous le compte NETWORK SERVICE, qui ne nécessite pas la configuration de lecteurs mappés. Essayez d’utiliser l’emprunt d’identité pour voir si cela résout le problème. Bien que vous ayez probablement besoin de trouver une meilleure solution que d’utiliser simplement l’emprunt d’identité. Si c’était moi, je continuerais à utiliser le chemin UNC.

Mappez-vous avec exactement les mêmes informations d’identification que le programme en cours d’exécution?

Vous pouvez essayer d’utiliser WNetConnection pour résoudre le lecteur mappé sur un chemin d’access réseau.

Êtes-vous en cours d’exécution sur Vista / Server 2k8? Ces deux services isolent les services dans la session 0 et la première session interactive est la session 1. Plus d’informations ici , sur l’isolation de session. Ainsi, même si le même utilisateur est utilisé à la fois pour le service et pour la connexion interactive, il s’agira de sessions différentes.

J’ai eu le même problème sur Win Server 2012. La désactivation de l’UAC l’a résolu.