Wie Sie ein Formular anzeigen, in windows-Dienst.
Möchte ich laden Sie ein Formular in der OnStart () - Methode in meiner windows-Dienst; hier ist mein code. Es ist nicht in Ordnung. Können Sie bitte helfen ?
protected override void OnStart(string[] args)
{
Form1 fr = new Form1();
fr.Show();
}
- Sie nicht laden/anzeigen der Formulare im service. Das ist der Punkt!
- Warum würden Sie versuchen und tun so etwas?
- will man Benutzername und die Zeit der kogin-und Abmelden von Benutzern,und ich Schreibe meinen code in die form1_load-und form1_closing und dann lade ich mein Formular mit meinem Dienst ,aber es schien nicht an allen arbeiten.
- Bitte beachten Sie, dass die Leute nicht anmelden - /Abmelden des service. Sie Werden login-und aus einer Anwendung verbraucht der service. Eine solche Anwendung ist, was sollte die Bereitstellung der Daten. Sollte der Dienst beschränkt sich, um es zu empfangen, zu verarbeiten und vielleicht zu speichern.
- ich benutze den Task Scheduler für diese???ich bin der neue Programmierer,kann ich mein Task-Scheduler, wenn der Benutzer login und logout???
- Was ist es, dass Sie versuchen zu erreichen? Vielleicht hast du eine Problem mit dem Ansatz eher als die Umsetzung.
- erste Sprache ist Persisch,ich erkläre meine Absicht,ist nicht klar??
- Wenn Sie sagte, Sie wollte die Zeit, und der Benutzer, der sich anmeldet... meinst du, dass sich in windows?
- @PedroC88 :ja.
- Dann sollten Sie versuchen, und schauen Sie in die Windows-überwachung... ich weiß nicht viel über das Thema, aber ich denke, das wäre der Weg zu gehen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht verwenden, Dienstleistungen, die Art und Weise. Dienstleistungen können nicht die Interaktion mit desktop direkt, denn Sie laufen in einem anderen WindowsStation von dem angemeldeten Benutzer-Sitzung. Sie müssen erstellen Sie eine weitere Anwendung, die die Kommunikation mit Ihrem service.
Zu machen, wie die Mitteilung, die Sie Lesen können, auf MSDN und in diesem Beispiel. Einige Ideen beschrieben, die bereits auf StackOverflow.
Services laufen in einer anderen Arbeitsstation und desktop auf einem interaktiven Benutzer. Selbst wenn das Formular erfolgreich geladen wird niemand in der Lage, es zu sehen.
Können Sie die "Allow service to interact with desktop" service-option, die es erlaubt, eine Dienstleistung zu teilen, der Konsole-Fenster entfernt. Allerdings ist dies eine wirklich schlechte Idee. Es öffnet Sicherheitslücken und eine Vielzahl von anderen Problemen. E. g. was passiert, wenn es mehr als ein user angemeldet? Oder wenn Sie auf dem terminal services ausgeführt?
Einen eher konventionellen design-ist eine client-Anwendung, die Handhabung der Benutzeroberfläche und im Gespräch mit den service im hintergrund laufen.
GUI erfordert Single-Threaded Apartment threading-Modell. Formen erfordern eine Nachricht Pumpe (wie begonnen von
Application.Run
).Service ist definitiv nicht darauf ausgelegt zu zeigen, GUI (auch interaktive Dienste sind als schlechte Praxis), es kann kontrolliert werden aus einem GUI, aber.
Für einen Dienst, um ein Fenster anzuzeigen, es muss so markiert werden, damit die Interaktion mit desktop". Dies kann durch den service-installer oder auf der Seite Eigenschaft für diesen Dienst.
Das ist nicht genug, um das Fenster für die Anzeige zuverlässig, aber. In der Praxis werden Sie haben, um festzustellen, ob ein Benutzer momentan eingeloggt und bekommen Ihre desktop. Dies ist kein triviales Unterfangen und kann eine Quelle von Sicherheitsproblemen. Wenn niemand da ist, der aktuell angemeldet ist, sind Sie aus Glück heraus.
Die beste Lösung ist, um eine separate GUI-app, die spricht, um den service über einige IPC-Mechanismus.