Domanda

Ho bisogno di creare un servizio in remoto e non rompere fuori di un comando ed eseguire "sc emotemachine creare ......" e ' all'interno del codice C#.

Tuttavia, quando si esegue il codice, anche se il comando sc funziona tranquillamente e, quindi, è la gestione del sistema remoto il ManagementScope.Collegare la chiamata viene generata un'eccezione con "server RPC non disponibile".

Un frammento di codice che fa questo è

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

come questo è il primo passo di un cammino che io sono un po ' bloccato, per cui per andare avanti.Il comando sc opere, così che cosa è a fare diversi (ad eccezione del non utilizzo .net biblioteche - forse ho bisogno di colpire il winapi più difficile?)

Grazie

È stato utile?

Soluzione

Dopo aver meditato su questo per un po 'vedere il tempo assegnato a questo compito erroded di distanza ho avuto la vecchia documentazione dell'api WIN32 e [DllImport]" ed inviti che ho bisogno di fare questa "vecchia maniera".Essendo un vecchio C di cane che ho usato per sapere il mio modo intorno a queste chiamate, incredibile quanto torna anche dopo alcuni anni di utilizzo le librerie gestite.

Quello che dovevo fare era essere in grado di creare un servcie, start up, fare un lavoro utile, interrompere e cancellare.Il creare, avviare, interrompere e cancellare, sono la meccanica e ho voluto concentrarsi sul "lavoro utile" alla parte di attività.

Ho copiato l'exe per la condivisione ADMIN$ e verificato il percorso locale (con i nostri amministratori di server non lo so!).Per fare questo ho chiamata

["netapi32.dll"]NetShareGetInfo 

e poi ho usato il seguente con da advapi32.dll

  • OpenSCManager
  • CreateService
  • StartService
  • OpenService (per quando voglio interrompere e cancellare - non tenere le maniglie apri come questo può prendere un po ' in modo pulito per mantenere thngs autonomo)
  • ControlService
  • QueryServiceStatus
  • CloseServiceHandle

Tutto questo funziona anche attraverso la connessione VPN.

Posso solo immaginare che il managed api sta cercando di fare molto più di quanto ho effettivamente bisogno, la differenza con il managed api e le api di Windows è un bel po', e non ci sono garanzie che il managed api potranno ottenere attraverso di essa, non era un modo adatto in avanti.

Altri suggerimenti

Ovviamente il codice di magazzino da MSDN non dipingere il quadro completo. Ottengo gli stessi risultati come te.

Controlla per cosa questo ragazzo fatto .

EDIT:

Credo che si sta cercando su un gruppo di lavoro e non di un dominio, giusto? Questo è il trucco, i gruppi di lavoro richiedono un po 'più di lavoro per ottenere attraverso. Il link qui sopra sembra avere una soluzione. Cercherò di nuovo da casa stasera.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top