2010-11-09 21 views
2

J'utilise this classe Imitateur pour usurper l'identité d'un compte de domaine pour accéder à un partage réseau comme ceci:Accès partage réseau via Process.Start (chemin) en utilisant des titres de compétences réseau

using(new Impersonartor(username, domain, password)) 
{ 
//Code Here 
} 

Copie du fichier à partir des œuvres de partage réseau oK:

using(new Impersonartor(username, domain, password)) 
{ 
CopyAll(uncPath, localPath) 
} 

Cependant, l'utilisation Process.Start pour afficher la part UNC dans l'Explorateur lance une « échec: nom d'utilisateur inconnu ou mot de passe incorrect »:

using(new Impersonartor(username, domain, password)) 
{ 
Process.Start(uncPath) 
} 

Soupçonnant que la classe Imitateur est en faute, je l'ai essayé fournir manuellement les informations d'identification à ProcessStartInfo comme ceci:

     System.Diagnostics.ProcessStartInfo viewDir = new System.Diagnostics.ProcessStartInfo(uncPath); 
         viewDir.UseShellExecute = false; 
         viewDir.Domain = netCred.Domain; 
         viewDir.UserName = netCred.UserName; 
         viewDir.Password = ConvertToSecureString(netCred.Password); 
         System.Diagnostics.Process.Start(viewDir); 

toujours pas de joie. Notez que je suis sûr que mon netCred (NetworkCredential) est correct car j'ai utilisé pour établir des connexions antérieures aux ressources authentifiées. Alors, comment afficher un chemin UNC dans l'Explorateur à l'aide d'informations d'identification réseau?

Répondre

3

J'ai eu le même problème aujourd'hui et voici ce qui a fonctionné pour moi:

private void OpenNetworkPath(string uncPath) 
{ 
    System.Diagnostics.Process.Start("explorer.exe", uncPath); 
} 
0

Au lieu de passer le uncpath au Process.Start, essayez de démarrer « explorer » dans Process.Start et passer la uncpath comme propriété de ArgumentsProcessStartInfo.

System.Diagnostics.ProcessStartInfo viewDir = new System.Diagnostics.ProcessStartInfo("explorer.exe"); 
viewDir.UseShellExecute = false; 
viewDir.Domain = netCred.Domain; 
viewDir.UserName = netCred.UserName; 
viewDir.Password = ConvertToSecureString(netCred.Password); 
viewDir.Arguments = uncPath; 
System.Diagnostics.Process.Start(viewDir); 
+0

Désolé, j'oublié de mentionner que je l'ai déjà essayé. Merci! – Ian

+0

Salut @Ian, j'ai essayé de créer un programme très basique pour tester le code et il semble se charger correctement. Je pense que le problème est lié à votre environnement, pouvez-vous donner plus de détails sur votre système d'exploitation/version/domaine global et si les informations d'identification réseau sont stockées localement dans le coffre-fort du système d'exploitation client? –

+0

Bien sûr. Windows 7 Professionnel 32 bits. La machine n'est pas jointe au domaine. L'objet NetworkCredentials est rempli pendant l'exécution. L'objet netcred est utilisé pour se connecter à différents services réseau tels que TFS (Works fine). Les informations d'identification ne sont pas stockées dans le coffre-fort du système d'exploitation. – Ian