Announcement

Collapse
No announcement yet.

Anwendung starten und beenden über Dienst (mit Desktopausgabe)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Anwendung starten und beenden über Dienst (mit Desktopausgabe)

    Erst mal ein freundliches Hallo in die Runde und nun zu meinem Problem:
    Ich hab hier eine ältere Anwendung die ich gerne über einen Windows Dienst starten und beenden (nicht kill) würde. Nach Möglichkeit wäre es noch gut wenn ich im Falle einer Anmeldung des Admins das Fenster der Anwendung auf dem Desktop des Admins hätte.
    Gibts da eine Möglichkeit?

    Liebe Grüße
    Libra

  • #2
    Hallo, passt jetzt warscheinlich nicht, weil es kein Dienst ist, aber einen
    Prozess starten geht so:
    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe","PAR AMETER");

    System.Diagnostics.Process.Start(startInfo);

    Comment


    • #3
      Danke für die Antwort. Das starten des Processes an sich ist weniger das Problem (hab ich wie beschrieben schon gemacht und funzt auch) viel mehr besteht das Problem darin den Process auf einem anderen Desktop zu starten bzw. den Process auch ohne ein vorhandenes Fenster wieder, mit einer message an diesen (oder sowas) ordnungsgemäß zu beenden (nicht einfach abschießen).

      Comment


      • #4
        Hallo,

        ...den Process auf einem anderen Desktop zu starten ....
        früher wäre das mit noch geringem Aufwand möglich gewesen. Aber seitdem Microsoft das Thema Sicherheit in den Vordergrund stellt, lässt sich so etwas nur mit hohem technischen Aufwand umsetzen. Das grundsätzliche Problem besteht darin, dass Windows seit der Version NT 4.0 verschiedene Windows Stations als "Sandkästen" nutzt. Nur in WinSta0 - der Window Station des interaktiv angemeldeten Benutzers - werden Fenster sichtbar. Allerdings ist jede Windows Station noch in verschiedene Desktops (wie Login und ScreenSaver etc.) unterteilt, die sich wiederum als "Sandkästen" gegenseitig abschotten. In älteren Windows-Versionen konnte ein Dienst, der in einer anderen Windows Station ausgeführt wurde, noch auf WinSta0 zugreifen, wenn bei der Dienstkonfiguration eine Checkbox ausgewählt wurde. Da allerdings zahlreiche Schadprogramme eine ähnliche Angriffstechnik nutzen, wird diese Direktverbindung in aktuellen Windows-Versionen geblockt.
        Eine Interaktion ist nur noch dann uneingeschänkt erfolgreich, wenn zum Beispiel das folgende Prinzip verwendet wird:

        1. Ein eigener Dienst wartet darauf, das sich ein Benutzer anmeldet.

        2. Wenn sich ein Benutzer anmeldet, startet der eigene Dienst eine eigene COM+ Anwendung, die als "Server-Anwendung" konfiguriert unter dem Benutzerkonto des interaktiv angemeldeten Benutzers ausgeführt wird (Radiobutton-Einstellung im Eigenschaftsdialog von COM+). Die eigene COM+ Anwendung (alias .NET Enterprise Service) wird als Assembly-DLL implementiert und vom Betriebssystem-Host dllhost.exe (dem so genannten Surrogate Process) ausgeführt.

        Durch die Kombination von Dienst (der Service wird sofort beim Rechnerstart unter dem LOCAL SYSTEM-Konto gestartet) und COM+ (der Surrogate Process des .NET Enterprise Service verwendet das Konto des interaktiv angemeldeten Benutzers) läuft die eigene Nutzfunktion in der Windows Station des interaktiv angemeldeten Benutzers, so dass der Desktop WinSta0 direkt gültig ist. Jedes von der COM+ Anwendung erzeugte Fenster ist somit automatisch für den Anwender sichtbar.
        Zuletzt editiert von Andreas Kosch; 07.04.2007, 07:40.

        Comment


        • #5
          Danke für die Infos. Mir würde es aber auch reichen wenn es unter Vista nicht läuft.
          Soweit Funktioniert es jetzt auch. Ich habe einen Dienst erstellt den ich unter Lokalem System ausführe und bei dem ich den Datenaustausch mit dem Desktop zulasse. Das funktioniert für meine Zwecke ganz gut. Die Anwendung läuft ohne Anmeldung und nach dem Login habe ich gleich das Fenster auf meinem Desktop.
          PROBLEM:
          Momentan gibt es allerdings noch das Problem das sich das Programm beim Abmelden (oder Herunterfahren) mit vollgenden Fehler verabschiedet:

          Programm - Fehler in Anwendung

          Die Anweisung in "0x100487a1" verweist auf Speicher in "0x00000058". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.

          gibts da vielleicht eine Lösung?

          Comment

          Working...
          X