Ho un C# exe che deve essere eseguito utilizzando WMI e accedere a una condivisione di rete. Tuttavia, quando accedo alla condivisione, ottengo un oggetto UnauthorizedAccessException. Se eseguo direttamente l'exe, la condivisione è accessibile. Sto usando lo stesso account utente in entrambi i casi.Autenticazione di rete durante l'esecuzione exe da WMI
Ci sono due parti per la mia applicazione, un client della GUI che gira su un PC locale e un processo di back-end che gira su un PC remoto. Quando il client deve connettersi al back-end, avvia il processo remoto utilizzando WMI (codice riprodotto di seguito). Il processo remoto fa una serie di cose, incluso l'accesso a una condivisione di rete usando Directory.GetDirectories() e riporta al client.
Quando il processo remoto viene avviato automaticamente dal client tramite WMI, non può accedere alla condivisione di rete. Tuttavia, se mi collego al computer remoto tramite Desktop remoto e avvio manualmente il processo di back-end, l'accesso alla condivisione di rete ha esito positivo.
L'utente specificato nella chiamata WMI e l'utente che ha effettuato l'accesso per la sessione di Desktop remoto sono gli stessi, quindi le autorizzazioni dovrebbero essere uguali, o no?
Vedo nella voce MSDN per Directory.Exists(), afferma "Il metodo Exists non esegue l'autenticazione di rete Se si interroga una condivisione di rete esistente senza essere pre-autenticata, il metodo Exists restituirà false." Presumo che questo sia correlato? Come posso garantire che l'utente sia autenticato correttamente in una sessione 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);
}
problema simile 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
Grazie, la mia ricerca non l'aveva dimostrato. Avrò una lettura e vedere se aiuta. – Andy
Ho aggiunto l'utente e ho fornito i permessi completi, ma non fa alcuna differenza :( – Andy