J'ai un C# exe qui doit être exécuté à l'aide de WMI et accéder à un partage réseau. Cependant, lorsque j'accède au partage, j'obtiens une exception UnauthorizedAccessException. Si je cours directement l'exe, le partage est accessible. J'utilise le même compte d'utilisateur dans les deux cas.Authentification réseau lors de l'exécution d'exe à partir de WMI
Il y a deux parties dans mon application, un client GUI qui s'exécute sur un PC local et un processus dorsal qui s'exécute sur un PC distant. Lorsque le client a besoin de se connecter au backend, il lance d'abord le processus distant en utilisant WMI (code reproduit ci-dessous). Le processus distant effectue un certain nombre de choses, y compris l'accès à un partage réseau à l'aide de Directory.GetDirectories() et rend compte au client.
Lorsque le processus distant est lancé automatiquement par le client à l'aide de WMI, il ne peut pas accéder au partage réseau. Toutefois, si je me connecte à la machine distante à l'aide du Bureau à distance et lance manuellement le processus backend, l'accès au partage réseau réussit.
L'utilisateur spécifié dans l'appel WMI et l'utilisateur connecté pour la session Bureau à distance sont identiques, les autorisations doivent donc être les mêmes, n'est-ce pas?
Je vois dans l'entrée MSDN pour Directory.Exists() que "La méthode Exists n'effectue pas d'authentification réseau Si vous interrogez un partage réseau existant sans être pré-authentifié, la méthode Exists retournera false." Je suppose que c'est lié? Comment puis-je m'assurer que l'utilisateur est correctement authentifié dans une session WMI?
ConnectionOptions opts = new ConnectionOptions();
opts.Username = username;
opts.Password = password;
ManagementPath path = new ManagementPath(string.Format("\\\\{0}\\root\\cimv2:Win32_Process", remoteHost));
ManagementScope scope = new ManagementScope(path, opts);
scope.Connect();
ObjectGetOptions getOpts = new ObjectGetOptions();
using (ManagementClass mngClass = new ManagementClass(scope, path, getOpts))
{
ManagementBaseObject inParams = mngClass.GetMethodParameters("Create");
inParams["CommandLine"] = commandLine;
ManagementBaseObject outParams = mngClass.InvokeMethod("Create", inParams, null);
}
problème similaire http://stackoverflow.com/questions/2291921/c-wmi-runs-an-exe-on-a-remote-computer-that-then-runs-another-exe-on-the- same-co/2291991 # 2291991 – lsalamon
Merci, ma recherche n'avait pas montré cela. Je vais lire et voir si ça aide. – Andy
J'ai ajouté l'utilisateur et donné toutes les perms, mais cela ne fait aucune différence :( – Andy