Tengo un exe de C# que necesita ejecutarse usando WMI y acceder a un recurso compartido de red. Sin embargo, cuando accedo a compartir, obtengo una Access Access no autorizada. Si ejecuto el archivo exe directamente, se puede acceder al recurso compartido. Estoy usando la misma cuenta de usuario en ambos casos.Autenticación de red al ejecutar exe desde WMI
Mi aplicación tiene dos partes, un cliente de GUI que se ejecuta en una PC local y un proceso de back-end que se ejecuta en una PC remota. Cuando el cliente necesita conectarse al backend, primero inicia el proceso remoto usando WMI (código reproducido a continuación). El proceso remoto hace varias cosas, incluido el acceso a un recurso compartido de red usando Directory.GetDirectories() e informa al cliente.
Cuando el cliente inicia automáticamente el proceso remoto utilizando WMI, no puede acceder al recurso compartido de red. Sin embargo, si me conecto a la máquina remota usando Escritorio Remoto e inicio manualmente el proceso de back-end, el acceso al recurso compartido de red se realiza correctamente.
El usuario especificado en la llamada WMI y el usuario que inició sesión en el Escritorio remoto son los mismos, por lo que los permisos deben ser los mismos, ¿no es así?
Veo en la entrada de MSDN Directory.Exists() que dice "El método Exists no realiza autenticación de red. Si consulta un recurso compartido de red existente sin autenticación previa, el método Exists devolverá falso". Supongo que esto está relacionado? ¿Cómo puedo asegurarme de que el usuario esté autenticado correctamente en una sesión de 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 similar 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
Gracias, mi búsqueda no lo había demostrado. Voy a leer y ver si me ayuda. – Andy
He agregado al usuario y me han otorgado todas las permanentes, pero no hay ninguna diferencia :( – Andy