Programm aus einem Programm heraus auf einem Server starten





  • Aber was habe ich denn von einer Anzeige der Dienste, wenn ich eben diese nicht nutzen kann?

    Im namespace System::ServiceProcess gibt es die Klasse ServiceController, darin gibt es eine Methode GetServices(servername), die ein Array mit den verfügbaren Diensten des Servers aus dem Server-Explorer zurückgibt...

    Und im namespace System::Runtime::Remoting gibt es eine Klasse ObjRef, die laut Dokumentation "alle relevanten Informationen zur Generierung eines Proxys die für Kommunikation mit einem Remoteobjekt erforderlich sind" enthält.

    Ich dachte so ein Remoteobjekt wäre dann etwas wie ein OleDbConnection-Objekt, mit dem ich dann Befehle (ähnlich wie OleDbCommands) auf dem Server absetzen kann.



  • "OleDbConnection" baut eine Datenbannk-Verbindung auf... hat nix mit "ausführen von Programmen zu tun".



  • Ja, ich meinte ja auch, dass diese Klasse ObjRef analog zur OleDbConnection eine Verbindung zum Server aufbauen würde, und es dann etwas wie ein "RemoteCommand" analog zu einem OleDbCommand geben würde.



  • Hallo Jochen,

    ich habemir das Beispiel

    und das passende Beispiel in C/C++:
    http://msdn.microsoft.com/en-us/library/aa390421

    mal angeschaut, aber ich komme damit überhaupt nicht klar, nicht nur dass ich es nicht richtig verstehe, bei mir lässt sich der Code nicht einmal kompilieren.

    Beim ersten Versuch meldete der Compiler folgenden Fehler:

    [code]1>.\wmi_test.cpp(203) : fatal error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?
    

    Also habe ich stdafx.h eingefügt, je nach dem an welcher Stelle ich es eingefügt habe, kam ich dann unterschiedliche Fehlermeldungen - und ich habe extra ein neues, leeres Projekt geöffnet, da ich das Theater mit den header-Einbindungen ja schon zu genüge kenne.

    Hier nun die verschiedenen Fehlermeldungen meines Compilers:

    1>.\wmi_test.cpp(2) : error C2855: Die Befehlszeilenoption '/clr:pure' steht in Konflikt mit der vorkompilierten Header-Datei
    1>.\wmi_test.cpp(2) : warning C4651: '/D_M_CEE_PURE=001' für vorkompilierte Headerdatei, aber nicht für aktuelle Kompilierung angegeben
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(38) : error C3821: "va_list": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(38) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(40) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(41) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(42) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(62) : error C3821: "va_list": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(62) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(64) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(65) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(66) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(87) : error C3821: "va_list": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(87) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(88) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(89) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(90) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(107) : error C3821: "va_list": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(107) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(108) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(109) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\swprintf.inl(110) : error C3821: "_Arglist": Ein verwalteter Typ oder eine verwaltete Funktion kann nicht in einer nicht verwalteten Funktion verwendet werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\stdexcept(255) : warning C4382: Auslösen von "std::length_error": Ein Typ mit einem __clrcall-Destruktor oder einem Kopierkonstruktor kann nur in einem /clr:pure-Modul abgefangen werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\stdexcept(261) : warning C4382: Auslösen von "std::out_of_range": Ein Typ mit einem __clrcall-Destruktor oder einem Kopierkonstruktor kann nur in einem /clr:pure-Modul abgefangen werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\stdexcept(267) : warning C4382: Auslösen von "std::invalid_argument": Ein Typ mit einem __clrcall-Destruktor oder einem Kopierkonstruktor kann nur in einem /clr:pure-Modul abgefangen werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\xlocinfo(77) : warning C4382: Auslösen von "std::runtime_error": Ein Typ mit einem __clrcall-Destruktor oder einem Kopierkonstruktor kann nur in einem /clr:pure-Modul abgefangen werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\xlocinfo(87) : warning C4382: Auslösen von "std::runtime_error": Ein Typ mit einem __clrcall-Destruktor oder einem Kopierkonstruktor kann nur in einem /clr:pure-Modul abgefangen werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\xlocinfo(99) : warning C4382: Auslösen von "std::runtime_error": Ein Typ mit einem __clrcall-Destruktor oder einem Kopierkonstruktor kann nur in einem /clr:pure-Modul abgefangen werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\xlocale(345) : warning C4382: Auslösen von "std::runtime_error": Ein Typ mit einem __clrcall-Destruktor oder einem Kopierkonstruktor kann nur in einem /clr:pure-Modul abgefangen werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\xlocale(364) : warning C4382: Auslösen von "std::runtime_error": Ein Typ mit einem __clrcall-Destruktor oder einem Kopierkonstruktor kann nur in einem /clr:pure-Modul abgefangen werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\xlocale(1340) : warning C4382: Auslösen von "std::out_of_range": Ein Typ mit einem __clrcall-Destruktor oder einem Kopierkonstruktor kann nur in einem /clr:pure-Modul abgefangen werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\xiosbase(280) : warning C4382: Auslösen von "std::ios_base::failure": Ein Typ mit einem __clrcall-Destruktor oder einem Kopierkonstruktor kann nur in einem /clr:pure-Modul abgefangen werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\xiosbase(282) : warning C4382: Auslösen von "std::ios_base::failure": Ein Typ mit einem __clrcall-Destruktor oder einem Kopierkonstruktor kann nur in einem /clr:pure-Modul abgefangen werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\xiosbase(284) : warning C4382: Auslösen von "std::ios_base::failure": Ein Typ mit einem __clrcall-Destruktor oder einem Kopierkonstruktor kann nur in einem /clr:pure-Modul abgefangen werden.
    1>C:\Program Files\Microsoft Visual Studio\VC\include\comdef.h(21) : fatal error C1189: #error :  comdef.h header cannot be included under /clr:safe or /clr:pure
    

    Wenn ich dann in den Projekteinstellungen die CLR-Unterstützung auf clr/pure stelle bekomme ich folgende Meldung:

    1>C:\Program Files\Microsoft Visual Studio\VC\include\comdef.h(21) : fatal error C1189: #error :  comdef.h header cannot be included under /clr:safe or /clr:pure
    

    Wenn ich dann stdafx.h als letzten Header einbinde, erhalte ich folgende Fehlermeldungen:

    1>.\wmi_test.cpp(23) : error C2065: 'COINIT_MULTITHREADED': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(23) : error C3861: "CoInitializeEx": Bezeichner wurde nicht gefunden.
    1>.\wmi_test.cpp(26) : error C2065: 'cout': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(27) : error C2065: 'hex': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(27) : error C2065: 'endl': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(46) : error C2065: 'EOAC_NONE': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(38) : error C3861: "CoInitializeSecurity": Bezeichner wurde nicht gefunden.
    1>.\wmi_test.cpp(62) : error C2065: 'IWbemLocator': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(62) : error C2065: 'pLoc': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(65) : error C2065: 'CLSID_WbemLocator': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(68) : error C2065: 'IID_IWbemLocator': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(82) : error C2065: 'IWbemServices': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(82) : error C2065: 'pSvc': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(86) : error C2227: Links von "->ConnectServer" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(87) : error C3861: "_bstr_t": Bezeichner wurde nicht gefunden.
    1>.\wmi_test.cpp(101) : error C2227: Links von "->Release" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(112) : error C3861: "CoSetProxyBlanket": Bezeichner wurde nicht gefunden.
    1>.\wmi_test.cpp(127) : error C2227: Links von "->Release" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(128) : error C2227: Links von "->Release" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(140) : error C2065: 'IWbemClassObject': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(140) : error C2065: 'pClass': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(141) : error C2227: Links von "->GetObject" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(143) : error C2065: 'pInParamsDefinition': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(144) : error C2227: Links von "->GetMethod" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(147) : error C2065: 'pClassInstance': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(148) : error C2227: Links von "->SpawnInstance" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(156) : error C2227: Links von "->Put" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(161) : error C2065: 'pOutParams': nichtdeklarierter Bezeichner
    1>.\wmi_test.cpp(162) : error C2227: Links von "->ExecMethod" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(172) : error C2227: Links von "->Release" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(173) : error C2227: Links von "->Release" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(174) : error C2227: Links von "->Release" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(175) : error C2227: Links von "->Release" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(176) : error C2227: Links von "->Release" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(185) : error C2227: Links von "->Get" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(185) : error C3861: "_bstr_t": Bezeichner wurde nicht gefunden.
    1>.\wmi_test.cpp(195) : error C2227: Links von "->Release" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(196) : error C2227: Links von "->Release" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(197) : error C2227: Links von "->Release" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(198) : error C2227: Links von "->Release" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    1>.\wmi_test.cpp(199) : error C2227: Links von "->Release" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>        Typ ist ''unknown-type''
    

    Das hört sich für mich so an, als würden irgendwelche weiteren Header oder Bibliotheken fehlen. Bei dem MSDN-Link finde ich aber nicht, was ich noch bräuchte damit es läuft.

    Hättest du da noch einen Rat für mich, oder noch irgendeinen guten Link zu einem Tutorial? Ich versuche jetzt schon seit drei Tagen diesen Optimierer auf dem Server anzustarten und ich finde nichts im Netz, das mir weiterrhilft.

    Ich wäre für jede Hilfe sehr dankbar.



  • Hab es übersehen, dass Du ja C++/CLI verwendest... dann ist es IMHO einfacher die .NET-Variante zu verwenden:
    http://weblogs.asp.net/steveschofield/archive/2006/06/06/WMI---start-a-process-on-remote-machine-passing-credentials_2E00_.aspx



  • Vielen Dank!
    Gucke ich mir gleich mal an!



  • Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Damit hat das super geklappt, vielen Dank.

    Kann ich so auch eine Textdatei auf einem der Laufwerke des Servers erstellen?
    Ich bin in der im Namespace System::Management in der msdn auf die WMI-Klasse Win32_LogicalDisk gestoßen, ist das die richtige? Ich finde dazu nämlich nur VB oder C#-Beispiele, in denen der freie Speicher oder so ausgelesen wird.

    Oder kann ich vielleicht sogar der Standard-stream-Funktion eine Server-Adresse mit Benutzernamen und Passwort mitgeben?

    Ich bin für alle Antworten dankbar!



  • Ach ja, ich habe auch schon Versucht der Create-Methode aus der Win32_Process-Class den "echo"-Befehl mitzugeben, wie man es in eine Kommandozeile schreiben würde, aber da kam als Rückgaewert 9: "Pfad nicht gefunden"


Anmelden zum Antworten