2012-04-10 7 views
0

Ich habe ein Windows-Service-Projekt, das 64 Bit ist, und jetzt brauche ich eine 32 Bit ausführbare Datei, die die gleiche Lebensdauer des Windows-Dienstes haben sollte. Da die 64-Bit-App-Domäne keine 32-Bit-DLL laden kann, muss ich diese 32-Bit-ausführbare Datei innerhalb der OnStart() - Funktion des 64-Bit-Windows-Dienstes starten. Ich frage mich, wie sollte ich die Lebensdauer dieser 32-Bit-ausführbaren Datei beibehalten? Was ich jetzt getan habe, ist, die ausführbare Datei in OnStart() zu starten und sie in OnStop() zu beenden.Windows-Dienstprojekt verwaltet eine andere ausführbare Datei?

Aber was ich jetzt besorgt ist, was ist, wenn diese 32 Bit ausführbare Datei (Prozess) getötet oder abgestürzt mitten in der Windows-Dienst ausgeführt wird? Ich muss es neu starten. Gibt es einen Ort oder eine Funktion in einem Windows-Dienst, wo ich andere Prozesse überwachen kann und wann immer diese Prozesse getötet werden, kann ich sie erneut starten? Oder ich denke an verschachtelte Windows-Dienste, aber ich finde kein nützliches Material zu diesem Thema.

Danke für jede Hilfe!

+0

Sie haben also einen Dienst, der auf einer Anwendung beruht? Das ist ein schlechtes Design ... was ist, wenn kein Benutzer angemeldet ist? – KingCronus

+0

Wenn beide Dienste auf der anderen Seite sind, können Sie einen ServiceController verwenden, um den Status des anderen zu überprüfen und sogar zu starten/stoppen/neu zu starten. Dies liegt daran, dass alle Dienste als administrative Vorteile dienen. – KingCronus

+0

@AdamKing Danke für Ihre Antwort. Warum genau ist es eine schlechte Idee? Ich erinnere mich, dass ich etwas über das Starten einer ausführbaren Datei auch ohne Windows-Login gelesen habe. Und meine 32 Bit ausführbare Datei benötigt keine Interaktion. Aber es ist grundsätzlich meine Freiheit zu entscheiden, ob der 32-Bit-Prozess eine Anwendung oder ein Windows-Dienst ist. Also werde ich auch den ServiceController überprüfen. – tete

Antwort

1

Was ich persönlich tun würde wäre, beide ausführbare Dateien als Windows-Dienste zu konfigurieren, damit Sie ServiceController in der vorgesehenen Weise verwenden können, um sicherzustellen, dass Ihr Programm ordnungsgemäß ausgeführt wird. Sie können auch einen Dienst als Voraussetzung für einen anderen festlegen.

Ich würde nicht empfehlen, von einem Service-Start der Anwendung, da dies für Sie erheblich Schwierigkeiten eröffnen würden ...

Zum Beispiel der Benutzer wäre die Anwendung unter fließendem?

Wenn ich die ServiceController-Route herunterfahre und beide Teile als Dienste haben, wäre das definitiv meine bevorzugte Route.

Aus Sicht des Entwurfs sollte eine ausführbare Datei, die ständig ausgeführt werden soll und keine Schnittstelle benötigt, wirklich ein Windows-Dienst sein, damit das Betriebssystem die richtige Zeitplanung vornimmt und automatisch neu starten kann Das Programm sollte ein Problem haben.

Verwandte Themen