Announcement

Collapse
No announcement yet.

[c#] Process aus Windows Dienst starten

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

  • [c#] Process aus Windows Dienst starten

    Hey Leute,

    Ich habe schon Stundenlang nach einer Lösung gesucht. Bei Google und in der SuFu findet sich nichts dazu an. Wie ich einen Process starten kann weiß ich ja aber aus irgendeinem Grund lässt sich kein Process aus meinem selbst Programmierten Windows Dienst starten...

    Weiß jemand wie und ob es Möglich ist einen Process also eine andere Anwendung aus einem Windows Dienst heraus zu starten?

    Also das soll so laufen. Die einzigste Funktion des Dienstes ist dieses Programm automatisch beim Booten zu starten. Das zu startende Programm ist mit einem Trayicon ausgestatten, das direkt beim starten des Programmes in die Traybar angezeigt wird. Das Programm an sich funktioniert prächtig mein Problem ist halt nur das ich es nicht über den Dienst starten kann.

    Edit: Habe gerade gemerkt das der process schon starten, jedoch wird die Anwendung nicht angezeigt, der Process der durch den Dienst gestartet werden soll wird im Taskmanager angezeigt.

    Da es im Moment nicht wirklich Programmcode in dem Windowsdienst gibt sehe ich keinen Grund den hier mitzu Posten. Da steht halt nur...

    process.Start()

    ... drin. Den Process habe ich über die Toolbox hinzugefügt und soweit auch konfiguriert und das habe ich auch richtiggemacht. Das kann ichsagen da ich den Process in einer normalen Windows Forms anwendung getestet habe dort funktioniert er nur nicht im Dienst.

    Hoffe ihr könnt mir weiterhelfen bin echt Langsam am verzweifeln was ich noch machen könnte.

    P.S.: Bin Praktikant in einer Firma die mit C# programmier und möchte hier mine Ausbildung machen. Zurzeit bin ich in der Phase wo ich mir C# selber beibringen soll. Soweit kein Problem nur manchmal klappt halt was nicht, dann suche ich meistens eine Lösung im Internet aber manchmal lässt sich leider nichts finden


    Mfg

    Xenonmaster
    Zuletzt editiert von Xenonmaster; 29.02.2008, 16:27.

  • #2
    As Designed. Ein Dienst hat einen anderen Desktop der nicht mit dem Desktop übereinstimmt den der user bekommt. Unter "alten" Windows-Versionen konnte man interaktive Dienste erstellen (Schalter in Dienstekonfiguration). Dies ist aber unter Vista nicht mehr möglich da man hier diese potentielle Sicherheitslücke geschlossen hat.

    Ergänze beim installieren des Dienstes Einträge im Autostart-Ordner der user so das beim Einlogen die GUI-Anwendung zum Dienst gestartet wird.

    Comment


    • #3
      [c#] Process aus Windows Dienst starten

      Moin,

      Danke für die schnelle Antwort. Ich habe noch Windows XP könnte es da noch irgendwie anders Möglich sein??? Würde ungern einen Dienst benutzen um eine Verknüpfung in den Autostart Ordner zu erstellen. Dann hätte der Dienst ja nur ein einziges mal eine Funktion ud wäre danach überflüssig. Oder habe ich da jetzt irgendetwas falsch verstanden??


      Mit freundlcihen Grüßen

      Xenonmaster

      Comment


      • #4
        Hallo,

        nur der Desktop mit dem Namen WinSta0 wird von Windows mit der Hardware verbunden, so dass nur dieser spezielle Desktop für den Anwender sichtbar ist (die Hintergründe sind in http://www.pluralsight.com/wiki/defa...owStation.html zu finden).

        Zwar könnte der eigene Dienst direkt mit der Win32-API-Funktion SetProcessWindowStation hantieren, aber unter Windows XP führt der in der angehängten Abbildung dargestellte Weg schneller zum Ziel.

        Besser ist jedoch der von Bernhard genannte Weg der Trennung in 2 Bestandteile:
        1. Der Dienst (Service) hat keine Benutzeroberfläche und wird gleich beim Rechnerstart ausgeführt.
        2. Das Clientprogramm (Fenster) wird nur dann gestartet, wenn sich ein Benutzer interaktiv am Rechner anmeldet (nur dann wird WinSta0 wirklich benötigt). Das Clientprogramm zeigt nur die Informationen des Dienstes an, dazu kommunizieren diese beiden separaten Prozesse miteinander (im .NET Framework 2.0 steht mit IpcChannel ein neuer Remoting-Channel zur Verfügung, der auf Named Pipes aufsetzt und somit nur für die Kommunikation von verschiedenen Prozessen des gleichen Rechners verwendet werden kann).


        Wenn es jedoch "nur" darum geht, eine separate EXE automatisch zu starten, lohnt sich der ganze Aufwand nicht. Neben dem Autostart-Verzeichnis stellt auch die Registry den Bereich HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run bereit, um eine Anwendung (Prozess) automatisch zu starten.
        Attached Files
        Zuletzt editiert von Andreas Kosch; 10.03.2008, 14:59.

        Comment

        Working...
        X