Accès à un partage réseau via Process.Start (chemin) en utilisant des titres de compétences réseau
-
29-09-2019 - |
Question
J'utilise cette classe Imitateur pour usurper l'identité d'un compte de domaine pour accéder à un partage réseau comme ceci:
using(new Impersonartor(username, domain, password))
{
//Code Here
}
Copie du fichier à partir du partage réseau fonctionne bien:
using(new Impersonartor(username, domain, password))
{
CopyAll(uncPath, localPath)
}
Cependant, l'utilisation Process.Start pour afficher la part UNC dans l'Explorateur lance un « é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, j'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 comme je l'ai utilisé pour établir des connexions avant ressources authentifiées.
Alors, comment puis-je voir un chemin UNC dans l'Explorateur en utilisant un justificatif d'identité réseau?
La solution
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);
}
Autres conseils
Au lieu de passer le uncpath au Process.Start
, essayez de démarrer "explorer" dans Process.Start
et passer le uncpath comme la propriété de ProcessStartInfo
Arguments
.
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);