WMI Prozess starten

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Kagurame.

    WMI Prozess starten

    Hallo,

    ich probiere aktuell mit WMI ein wenig rum, da ein Service in einem Firmennetzwerk die Anwendung verteilen und starten soll (AlarmSoftware)

    VB.NET-Quellcode

    1. ' Prozess festlegen
    2. Dim processToRun() As String = {"C:\WINDOWS\system32\mspaint.exe"}
    3. Dim conOptions As New ConnectionOptions
    4. Dim managementScope As New ManagementScope("\\kagurame\root\cimv2", conOptions)
    5. managementScope.Connect()
    6. ' WMI-Management-Objekt festlegen
    7. Dim managementClass As New System.Management.ManagementClass(managementScope, New ManagementPath("Win32_Process"), New ObjectGetOptions())
    8. ' Prozess auf Zielsystem invoken / ausführen
    9. managementClass.InvokeMethod("Create", processToRun)

    Dies funktioniert, bei mir plobbt Paint auf.

    Nun soll dies aber auf anderen Rechnern auch passieren (dort dann natürlich die entsprechende Clientanwendung)

    VB.NET-Quellcode

    1. ' Prozess festlegen
    2. Dim processToRun() As String = {"C:\WINDOWS\system32\mspaint.exe"}
    3. ' Alternativ wurde auch \\arbeitskollege1\C$\WINDOWS\system32\mspaint.exe getestet, also als SMB Path
    4. Dim conOptions As New ConnectionOptions
    5. conOptions.Username = "Administrator"
    6. conOptions.Password = "wurstsuppe"
    7. Dim managementScope As New ManagementScope("\\arbeitskollege1\root\cimv2", conOptions)
    8. managementScope.Connect()
    9. ' WMI-Management-Objekt festlegen
    10. Dim managementClass As New System.Management.ManagementClass(managementScope, New ManagementPath("Win32_Process"), New ObjectGetOptions())
    11. ' Prozess auf Zielsystem invoken / ausführen
    12. managementClass.InvokeMethod("Create", processToRun)


    Dieser Kollege hat einen Win XP Rechner, ich kann connecten, aber bei ihm passiert nichts.

    Ein anderer Kollege (arbeitskollege2) hat einen Win7-Rechner, dort heißt es, der RPC-Dienst ist nicht erreichbar.

    Weiß einer, woran dies liegen kann? Habe bisher etwa 2 Stunden gegooglet ich komme hier nicht weiter...

    (Es könnte für den ein oder anderen so aussehen, als Stelle ich die Frage heute da zweite oder dritte mal, es waren aber immer verschiedene Sachen, mit denen ich da Probleme hatte)
    Möchtest du, dass der Prozess startet?
    Oder möchtest du, dass die GUI zu sehen ist?

    Bissl Zusatzinfo.
    So wie du es hast, müsste es laufen.
    Du wirst allerdings nur einen Prozess im Taskmanager sehen. Keine GUI.
    Mir ist nicht bekannt, wie man via Win32_Process einen Interaktiven Prozess starten kann.
    Das Workaround wäre wohl über Win32_ScheduledJob.Create
    Ist aber äußerst unschön


    Ciao mono
    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mono“ ()

    Naja, bei mir lokal startet der Prozess, beim Kollegen tut sich nichts.

    Ich werde wohl, um die Kollegen nicht von der arbeit abzuhalten (die deutlich Produktiever und teurer ist als meine [Azubi], wohl mal eine VM erstellen mit der ich arbeiten kann.

    Der prozess sollte schon richtig starten, also das Programm selbst.
    Jetzt wo du es so sagst, sagt Create nicht gerade viel über das Ergebniss aus...
    Über WIn32_Process startet ein Prozess in einem eigenen Kontext.
    Vergleichbar mit einem Dienst.
    Der User kann das Programm dann nicht bedienen!

    Ich habe deinen Code getestet, er funktioniert Remote ebenso.
    Das einzige was ich hinzugefügt habe ist unter ConnectionOptions ImpersonationLevel = Impersonate.

    Dir muss auch klar sein, dass der Prozess unter dem Benutzer, mit dem du dich verbindest startest.
    Das ist meine Signatur und sie wird wunderbar sein!

    Mono schrieb:

    Dir muss auch klar sein, dass der Prozess unter dem Benutzer, mit dem du dich verbindest startest.

    Das ist meine Absicht. Ich möchte in diesem Beispielhaften Fall, dass bei meinem Kollegen Paint auf geht.

    OK... gerade nochmal getestet und das einbezogen, was du bereits gesagt hattest. Da ich mit meinem Konto ja keine Domänen-Rechte habe, benutze ich ja Administrator.
    Der Kollege hat unter den Prozessen nachgeschaut und dort tatsächlich den besagten Prozess unter der entsprechenden Prozess-Id gefunden.

    Wie du gesagt hast, kann er mit dem Prozess nichts anfangen.

    Was muss nun getan werden, dass der Prozess bei ihm nutzbar ist? (ohne dass er mit seine Anmelde-Informationen gibt, damit ich den Prozess als er selbst ausführen kann)
    Es geht hierbei ja um einen Client, welcher immer da sein soll und - wenn er mal abstürzt - direkt wieder gestartet wird.

    Gibt es da alternative Befehle als "Create"?

    Bzw., wo ist diese Methode (Create) definiert? Ich finde es bisher nicht heraus, wüsste ich dies, könnte ich leichter selbst nach Alternativen suchen...

    Du wirst allerdings nur einen Prozess im Taskmanager sehen. Keine GUI.
    Mir ist nicht bekannt, wie man via Win32_Process einen Interaktiven Prozess starten kann.
    Das Workaround wäre wohl über Win32_ScheduledJob.Create
    Ist aber äußerst unschön

    Das ist meine Signatur und sie wird wunderbar sein!
    OK, gelesen, aber beim Antwort schreiben vergessen (hatte es vorher gelesen...)

    Was ich gerade noch Versuche, aber im Moment nur Lokal testen kann (wo es vorher auch schon Funktionierte) ist folgendes:

    VB.NET-Quellcode

    1. Dim conOptions As New ConnectionOptions
    2. Dim managementScope As New ManagementScope("\\kagurame\root\cimv2", conOptions)
    3. Dim managementClass As New System.Management.ManagementClass(managementScope, New ManagementPath("Win32_Process"), New ObjectGetOptions())
    4. Dim start As New System.Management.ManagementClass("Win32_ProcessStartup")
    5. start("ShowWindow") = 1
    6. Dim createParams As ManagementBaseObject = managementClass.GetMethodParameters("Create")
    7. createParams("CommandLine") = "\\kagurame\C$\windows\mspaint.exe"
    8. createParams("ProcessStartupInformation") = start
    9. Console.WriteLine(managementClass.InvokeMethod("Create", createParams, New InvokeMethodOptions)("ReturnValue"))

    Wobei hier Paint den ExitCode 9 zurückliefert, Notepad gibt 0 zurück und startet...

    Was ich zu ExitCode 9 gefunden habe ist folgendes:

    Exit code 9: Ran out of CPU time.

    Kann damit aber gerade nichts anfangen...

    Wie gesagt, über Remote kann ich im Moment nicht testen, da der entsprechende Kollege gerade mit Support beschäftigt ist (wahrscheinlich noch länger).
    Glaubst du, rein vom Code her, dass dies funktionieren könnte?

    (Dort dann unter Mitgabe entsprechender Options)
    Hast du die Möglichkeit, dies bei dir vielleicht nochmal zu testen?

    (Den Code, bzw. die entsprechenden Klassen habe ich hier gefunden: Link, wobei ich nur vermute, dass es das sein könnte, mein Englisch ist leider Mangelhaft...)
    Ich wiederhole mich gerne nochmal:
    "Win32_Process" Create --> KEIN INTERAKTIVER PROZESS MÖGLICH XD

    Ich habe das vor ner Weile mal probiert.
    Auch mit Process_Startup und WindowState etc.
    Geht remote NICHT.

    Zitat MSDN:
    You can use Win32_Process.Create to execute a script or application on a remote computer. However, for security reasons, the process cannot be interactive.


    Link

    Außerdem gibt es noch PsExec

    Ich weiss nicht, wie es mit diversen WinAPI aussieht. Ob es da eine Möglichkeit gibt ist mir nicht bekannt.
    Das ist meine Signatur und sie wird wunderbar sein!
    OK.... ich hasse Missverständnisse :/

    Was ich dann allerdings nicht verstehe, warum es funktioniert, wenn ich meinen eigenen Rechner benenne. Der geht ja dann auch über´s Netzwerk zu der entsprechenden Maschiene (quasi Remote) (denke ich), auch wird der Prozess von System32 als ApplicationPath aus gestartet. Egal auf welcher Maschiene ich mich so befinde...

    Naja... ich les mir mal den Link den du geschickt hast nochmal durch und suche weiter... :/
    Irgendwie muss es ja gehen, Norton und so können´s ja auch :<

    Was ich dann allerdings nicht verstehe, warum es funktioniert, wenn ich meinen eigenen Rechner benenne


    Benenne ?
    Du kannst dich Remote nicht an deinem eigenen Rechner via WMI anmelden.
    Du kannst aber Prozesse via WMI lokal starten. Diese können interaktiv sein.
    Das ist meine Signatur und sie wird wunderbar sein!
    OK danke... ich verstehe wohl noch zu wenig über Remote :/

    Naja, ich such mal weiter nach Lösungsansätzen und melde mich dann, wenn ich was hab oder irgendwo wieder auf Probleme stoße.

    edit: Wir probieren einen anderen Ansatz aus, der sich ähnlich verhält. Daher Thema vorerst mal erledigt.
    Diverse Third-Party-Tools hätten eine Client-Installation dieser erfordert, was das ganze Theater wieder Sinnlos macht.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kagurame“ ()