Frage

Ich brauche einen Dienst remote zu schaffen und würde lieber nicht auf einen Befehl ausbrechen und führen Sie „sc \ remotemachine schaffen ......“ und will es in der C # -Code zu tun.

Wenn jedoch der Code ausgeführt wird, obwohl der Befehl sc ganz glücklich arbeitet und somit ist das Remote-System die Verwaltung der ManagementScope.Connect Aufruf eine Ausnahme wirft mit „Der RPC-Server ist nicht verfügbar.“

Ein Code-Snippet, das nicht das ist

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

, da dies über den ersten Schritt auf dem Weg, ich bin ein bisschen stecken, wo als nächstes zu gehen. Die sc-Befehl funktioniert, so was ist es anderes zu tun (außer nicht mit .net Bibliotheken - vielleicht muss ich die winapi schwerer treffen)

Danke

War es hilfreich?

Lösung

Nachdem dies für ein wenig Nachdenken, während der Zeit, um diese Aufgabe zugewiesen zu sehen ist erroded weg bekam ich die alte Win32-API-Dokumentation und [DllImport] ed die Anrufe ich brauchte dies die ‚altmodische Art und Weise‘ zu tun. Als ein alter C Hund Früher habe ich meine Art und Weise, um diese Anrufe zu wissen, erstaunlich, wie viel zurückkommt auch nach ganz wenigen Jahren die verwalteten Bibliotheken verwenden.

Was ich brauchte, war, ein, um einen servcie zu erstellen, starten Sie es, tun nützliche Arbeit, stoppen sie und löschen. Die create, Start, Stop und löschen sind Mechanik und ich wollte auf dem „tun nützliche Arbeit“ Teil der Tätigkeit konzentrieren.

ich zum ersten Mal den Dienst der exe auf die ADMIN $ -Freigabe kopiert und überprüft den lokalen Pfad zu, dass (mit unserem Server admins es nicht sagen ist!). Um dies zu tun ich Anruf

["netapi32.dll"]NetShareGetInfo 

und dann habe ich folgendes mit von advapi32.dll

  • OpenSCManager
  • Create
  • Startservice
  • Openservice (für, wenn ich will, es stoppen und löschen - nicht halten die Griffe öffnen, da dies ein nehmen kann, während so sauberer thngs selbst zu halten enthalten)
  • Control
  • Query
  • CloseServiceHandle

Das alles funktioniert auch über die VPN-Verbindung.

Ich kann nur vermuten, dass das verwaltete api versucht, viel mehr zu tun, als ich tatsächlich brauchte - den Unterschied in der Zeit genommen, die verwaltete API und der Windows-API ist ziemlich viel, und mit keine Garantie, dass das verwaltete api bekommen durch sie nach vorn kein geeigneter Weg war.

Andere Tipps

Offensichtlich ist der Aktiencode von MSDN malt nicht das ganze Bild. Ich erhalte die gleichen Ergebnisse wie Sie.

Überprüfen Sie heraus, was dieser Kerl tat .

EDIT:

Ich glaube, Sie versuchen es auf einer Arbeitsgruppe und nicht eine Domäne, nicht wahr? Das ist der Trick, Arbeitsgruppen verlangen eine Arbeits Bit durchzukommen. Der Link oben scheint eine Abhilfe zu haben. Ich werde versuchen, wieder von zu Hause heute Abend.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top