Pregunta

Es necesario crear un servicio de forma remota y prefieren no salir a un sistema y ejecute "sc \ máquinaremota crear ......" y quiero hacerlo dentro del código C #.

Sin embargo, cuando se ejecuta el código pesar de que el comando sc trabaja felizmente y por lo tanto es la gestión del sistema remoto de la llamada ManagementScope.Connect está lanzando una excepción con "El servidor RPC no está disponible".

Un fragmento de código que tiene esto es

string machineName = "othermachine";
string path = string.Format(@"\\{0}\root\cimv2", machineName);
ManagementScope scope = new ManagementScope(path);
scope.Connect();

ya que se trata del primer paso en el camino que estoy un poco atascado en cuanto a dónde ir después. El comando sc, por lo que ¿qué es lo que hace diferente (aparte de no usar las bibliotecas .NET - tal vez tenga que pulsar el winapi más duro)

Gracias

¿Fue útil?

Solución

Después de considerar esto por un rato viendo el tiempo asignado a esta tarea a erroded distancia me dio la documentación de la API de Win32 de edad y [DllImport] 'ed las llamadas que tenía que hacer esto de la 'manera antigua'. Al ser un perro viejo C que solía conocer mi camino en torno a estas llamadas, lo increíble cantidad viene de vuelta, incluso después de un buen número de años de uso de las bibliotecas administradas.

Lo que tenía que hacer era ser capaz de crear un servcie, ponerlo en marcha, hacer un trabajo útil, detenerlo y eliminarlo. El crear, iniciar, detener y eliminar son mecánicos y quería concentrarse en el "trabajo útil" parte de la actividad.

La primera vez que copiar el exe del servicio para el recurso compartido ADMIN $ y se verificó la ruta local que (con nuestros administradores del servidor no se sabe!). Para ello he llamado

["netapi32.dll"]NetShareGetInfo 

y luego utiliza la siguiente con de advapi32.dll

  • OpenSCManager
  • CreateService
  • StartService
  • OpenService (para cuando quiero parar y eliminarlo - No mantener los identificadores abiertos ya que esto puede tomar un tiempo tan limpio para mantener thngs autónomo)
  • ControlService
  • QueryServiceStatus
  • CloseServiceHandle

Todo esto funciona incluso a través de la conexión VPN.

Sólo puedo adivinar que la API administrada está tratando de hacer mucho más de lo que realmente se necesita - la diferencia en el tiempo que lleva utilizando la API administrada y la API de Windows es mucho, y sin garantías de que la API administrada obtendrá a través de él no era una forma adecuada de avanzar.

Otros consejos

Es evidente que el código de valores de MSDN no pintar el cuadro completo. Consigo los mismos resultados que usted.

Confirmar lo que este hombre hizo .

EDIT:

Creo que estamos tratando en un grupo de trabajo y no un dominio, ¿verdad? Ese es el truco, grupos de trabajo exigen un poco más de trabajo para pasar. El enlace de arriba parece tener una solución. Voy a tratar de nuevo de casa esta noche.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top