Laden...

Dienst Starten

Erstellt von chriss_2oo4 vor 16 Jahren Letzter Beitrag vor 16 Jahren 5.361 Views
C
chriss_2oo4 Themenstarter:in
103 Beiträge seit 2007
vor 16 Jahren
Dienst Starten

Hi,

ich habe ein Problem beim Starten von einem Dienst. Ich habe eine Anwendung erstellt, mit deren Hilfe WinVNC (UltraVNC) gestartet werden kann.

Bei folgender Theorie lieg ich ja richtig?

Wenn ich mit Process.Start(...) eine Anwendung starte, dann läuft diese als Anwendung für einen bestimmten User. Loggt sich dieser User aus, läuft meine Anwendung auch nicht mehr.

Ein Dienst hingegen wird (meist) vom System gestartet und ist auch ohne einen angemeldeten Benutzer aktiv.

Mein Problem ist nähmlich, dass standardmäßig nach 15 Min. der Bildschirmschoner mit Passwortabfrage zur Reaktivierung aktiv wird -> man kann den Bildschirmschoner nur durch ein erneutes Anmeldem am System deaktivieren -> ergo gehe ich davon aus, dass sich jeder Benutzer automatisch nach 15 Inaktivität ausloggt und ich kann mich somit nicht mehr per VNC am Rechner anmelden.

Nach einigen google-Recherchen bin ich auf den Übergabeparameter -servicehelper gestoßen, der WinVNC als dienst startet und sogar das Icon im System Tray anzeigt -> genau das was ich will 😁

Leider lässt sich die WinVNC.exe mit Parameter nicht mit Process.Start(Datei, Parameter) starten, allderdings konnte VNC + servicehelper Parameter auch nicht mit der Kommandozeile gestartet werden.

Jetzt hab ich mir gedacht, dass man nicht "einfach so" einen Dienst starten kann, sondern bestimmte Methoden benötigt, die mir das übernehmen -> ABER eigentlich übernimmt das ja schon UltraVNC für mich 🤔

Bin aufjeden Fall völlig ratlos 😁

Erstmal Danke fürs Lesen!

Lg chriss

V
327 Beiträge seit 2005
vor 16 Jahren

was du suchst ist wohl...


ProcessStartInfo pi = new ProcessStartInfo();
pi.FileName = "vnc.exe";
pi.Arguments = "servicehelper";
Process.Start(pi);

wir haben RealVNC im Einsatz.
Da musst du erst registrieren (musst du bei jedem Dienst)

winvnc4.exe -noconsole -register

und dann starten

winvnc4.exe -noconsole -start

MFG Veasel

C
chriss_2oo4 Themenstarter:in
103 Beiträge seit 2007
vor 16 Jahren

Hi,

erstmal vielen Dank für deine Antwort veasel, meine kommt etwas spät, da ich die ganzen ferien nicht am PC war :evil:

Mit dem o. g. Beispiel starte ich imho einen Prozess (mit dem User der aktuell die Anwendung benutzt), leider lässt sich UltraVNC so nicht starten, bzw. es wird kein Icon im SysTray angezeigt und es killt sich automatisch nach einiger Zeit.

Ich denke dass ich WinVNC als Dienst, also mit dem System-Account, starten muss, ich bin aber bisher noch nicht dahinter gekommen, wie ich eine Anwendung als Dienst starten kann?

lg Chriss

V
327 Beiträge seit 2005
vor 16 Jahren

hallo,

willkommen in 2008!!
ich kann mich irren aber meiner meinung nach kann man eine anwendung nicht einfach so als dienst starten. dienste müssen registriert werden und dann üder das dienstsnapin gestartet werden.
bei vnc ist denke ich beides startbar.

kannst du bei der installation von ultraVNC schon auswählen, dass es ein serverdienst sein soll? (so geht das bei RealVNC)
Geht UltraVNC überhaupt als serverdienst zu starten?

MFG Veasel

C
chriss_2oo4 Themenstarter:in
103 Beiträge seit 2007
vor 16 Jahren

Hi veasel,

und nochmal vielen Dank für deine Antwort!

Wenn ich UltraVNC zum Autostart (Registry) hinzufüge (inkl. -serverivehelper) Funktioniert alles wunderbar (ich denke weil es dann vom System und nicht von einem Benutzer gestartet wird - im Taskmanager wird beim Benutzer auch SYSTEM angezeigt)

Ich möchte auch keinen Dienst installieren, da ich UltraVNC nur in bestimmten Situationen verwenden möchte.

Evtl. würde es auch schon funktionieren, wenn ich die Anwendung unter dem SYSTEM-Benutzer starten könnte, falls man soetwas in c# realisieren kann?

Lg Chriss

V
327 Beiträge seit 2005
vor 16 Jahren

hallo chriss_2oo4,

wie das mit dem SYSTEM nutzer geht, kann ich dir erstmal auch nicht sagen, aber du kannst bei der ProcessStartInfo Klasse auch einen username und ein password setzen unter dem der Process dann laufen soll.
Hier könntest du ja den lokalen Administrator angeben.

irgendwie hab ich auch noch nicht ganz verstanden was du machen willst.
wenn der rechner nach 15 min. gesperrt ist und VNC als Server laufen würde, dann kannst du auch nichts machen, denn du hast ja das passwort des nutzers nicht...oder?

erklär bitte nochmal was du genau vor hast.

danke!!

grüße von der ostsee...

MFG Veasel

C
chriss_2oo4 Themenstarter:in
103 Beiträge seit 2007
vor 16 Jahren

Hi,

sorry für die späte Antwort... ich dachte mir wird eine Email zugestellt, sobald jemand antwortet.

Das Problem ist, wenn ich VNC mit einem Benutzer starte, dann kann ich mich nur solange per VNC auf dem Rechner einloggen, wie der Benutzer seinen Account nutzt.

Wenn sich nun der Benutzer automatisch nach 15 Min abmeldet (= Bildschirmschoner + Passwortabfrage) kann ich mich auch nicht mer via VNC auf 'm Rechner einloggen -> SYSTEM-Benutzer wäre hilfreich, da dieser immer verfügbar ist.

Aber wie ich gesehen habe, wurde VNC doch als Dienst auf dem Rechner installiert. Mein Problem ist es nun VNC als Dienst von meiner Anwendung aus zu starten.

Ich hab google Benutzt und auch einige Beispiele gefunden, aber

System.ServiceProcess

gibt es bei "normalen" Windows-Anwendungen nicht -> Ist es möglich, dass ich diesen Namespace nur für die Programmierung von Diensten einsetzen kann und somit auch nur einen Dienst von einem anderen Dienst aus steuern kann?

Lg Chriss

V
327 Beiträge seit 2005
vor 16 Jahren

hallo,

also dienste kann nicht so starten wie programme. du musst dienste registrieren und dann über den Dienstemanager starten.

meiner meinung nach bietet aber VNC das schon out of the box...

[B]registrieren:[/B]
winvnc4.exe -noconsole -register
[B]starten:[/B]
winvnc4.exe -noconsole -start
[B]stoppen:[/B]
winvnc4.exe -noconsole -stop
[B]unregister:[/B]
winvnc4.exe -noconsole -unregister

anwenden kannst du das so wie ich es weiter oben schon geschrieben habe mit einer ProcessStartInfo, da alle infos rein, exename, parameter und dann an Process.Start() übergeben.

an sonsten guck dir mal Windows Dienste aus einem Form Steuern
an. das hilft dir vielleicht auch weiter.

ist denn der VNC dienst registriert nur nicht gestartet?

viele grüße...

MFG Veasel

C
chriss_2oo4 Themenstarter:in
103 Beiträge seit 2007
vor 16 Jahren

Hi veasel,

zunächst nochmal danke für deine Antworten und ein Link zu den möglichen Parametern von WinVNC: Parameter

Meinst du mit registrieren, einen Service installieren, so dass er dann unter Systemsteuerung -> Verwaltung -> Dienste angezeigt wird, oder ist registrieren etwas anderes?

Hab fogendes schon probiert:

  1. winvnc.exe -sinstall -> Installiert den Dienst

  2. winvnc.exe -service -> Startet den Service

  3. winvnc.exe -servicehelper -> Startet den Servicehelper (SysTray Icon)

  4. winvnc.exe -kill -> Beendet VNC

  5. winvnc.exe -remove -> Deinstalliert den Service

Leider startet auch so kein VNC 🙁

Lg Chriss

V
327 Beiträge seit 2005
vor 16 Jahren

hallo,

ja das meine ich mit registrieren.

okay...was verstehst du unter VNC starten?

wenn der Dienst läuft ist doch alles okay...oder nicht?
dann kannst du doch von einem anderen PC unter Verwendung des VNC Viewers auf den PC (auf dem der Dienst läuft) zugreifen.

[B]Viewer starten:[/B]
VNC4\vncviewer.exe

MFG Veasel

C
chriss_2oo4 Themenstarter:in
103 Beiträge seit 2007
vor 16 Jahren

Hi,

das ist ja genau mein Problem, wenn ich die EXE als Anwendung (...\winvnc.exe), also mit dem Benutzer mit dem ich gerade angemeldet bin, starte, dann funktioniert VNC nur solange bis der Bildschirmschoner einsetzt.

Die EXE als Service (...\winvnc.exe -service) starten geht leider nicht.

Lg Chriss

V
327 Beiträge seit 2005
vor 16 Jahren

ich versteh absolut nicht wo das problem ist...

du installiert VNC als Server (ServiceMode), dann wird der Service und der ServiceHelper bei jedem Start des PC gestartet. und bleibt auch gestartet wenn sich der Nutzer abmeldet! (das ist der Rechner den man remote steuern möchte)

auf deinem Rechner startest du den Viewer, gibts den Namen oder IP des ersten Rechners ein und ggf. das VNC-Password und dann siehst du den Desktop des anderen PCs.

Wo setzt du deine Software ein und was soll die dann da machen...??

PS: wenn der ScreenSaver an ist und eine Passwortabfrage eingeschaltet ist, dann wird der Benutzer nicht abgemeldet, sondern nur der PC gesprerrt...alles andere wäre ja auch schlimm. d.h. alle Programme die laufen, laufen auch im hintergrund weiter, bis der Nutzer die Sperre aufhebt. Wenn du die Sperre mit dem AdminKonto aufhebst, dann werden auch alle Programme des Nutzers beendet. Steht aber auch da...

wie gesagt, ich verstehe nicht, was?, wo? und von wo? aus dein programm etwas machen soll...

MFG Veasel

C
chriss_2oo4 Themenstarter:in
103 Beiträge seit 2007
vor 16 Jahren

Hi,

also ob nun der Bildschirmschoner, die Anwendungen sperrt, oder diese beendet und nach dem login wieder startet ist in meinem Fall egal.

Ich habe ein Tool das den VNC-Datenverkehr überwacht, Zugriffe loggt usw. Die Anwendung besitzt einen Menüpunkt, der es dem Benutzer erlaubt, VNC zu deaktiveren. Nach dem der Benutzer VNC deaktiviert hat, soll er aber auch die Möglichkeit haben VNC wieder zu aktivieren (das ganze soll ohne neustart von statten gehen).

lg Chriss

183 Beiträge seit 2004
vor 16 Jahren

Wenn UltraVNC einmal als Service registriert wurde all you need is: ServiceController.

ServiceController svrCtrl = new ServiceController("VNC Server");
Console.WriteLine(svrCtrl.DisplayName + " is " + Enum.GetName(typeof(ServiceControllerStatus), svrCtrl.Status));

switch (svrCtrl.Status)
{
   case ServiceControllerStatus.PausePending:
      svrCtrl.WaitForStatus(ServiceControllerStatus.Paused);
      break;
   case ServiceControllerStatus.StopPending:
      svrCtrl.WaitForStatus(ServiceControllerStatus.Stopped);
      break;
   case ServiceControllerStatus.StartPending:
   case ServiceControllerStatus.ContinuePending:
      svrCtrl.WaitForStatus(ServiceControllerStatus.Running);
      break;
}

switch (svrCtrl.Status)
{
   case ServiceControllerStatus.Paused:
      svrCtrl.Continue();
      svrCtrl.WaitForStatus(ServiceControllerStatus.Running);
      break;
   case ServiceControllerStatus.Stopped:
      svrCtrl.Start();
      svrCtrl.WaitForStatus(ServiceControllerStatus.Running);
      break;
   case ServiceControllerStatus.Running:
      svrCtrl.Stop();
      svrCtrl.WaitForStatus(ServiceControllerStatus.Stopped);
      break;
}

Console.WriteLine(svrCtrl.DisplayName + " is " + Enum.GetName(typeof(ServiceControllerStatus), svrCtrl.Status));

So einfach wie möglich, aber nicht einfacher. [Albert Einstein]

take a look at
* baer-torsten.de
* codinghints

C
chriss_2oo4 Themenstarter:in
103 Beiträge seit 2007
vor 16 Jahren

Hi,

die Klasse ServiceController ist doch Mitglied des Namespace System.ServiceProcess und den gibt bei mir leider nicht, d. h. es gibt ihn nur wenn ich ein Dienst erstellen möchte. Bei einer normalen Windows Anwendung geht leider nix... gibts vielleicht einen Trick das auch bei einer normalen Anwendung zu nutzen?

lg Chriss

183 Beiträge seit 2004
vor 16 Jahren

?( Verweis hinzufügen ?(

So einfach wie möglich, aber nicht einfacher. [Albert Einstein]

take a look at
* baer-torsten.de
* codinghints

V
327 Beiträge seit 2005
vor 16 Jahren

hallo,

genau diese info habe ich dir doch schon weiter oben mit dem link Windows Dienste aus einem Form Steuern gegeben.
bitte auch lesen, da steht alle drin.

MFG Veasel

C
chriss_2oo4 Themenstarter:in
103 Beiträge seit 2007
vor 16 Jahren

Hi,

ok vielen Dank, hat soweit geklappt.

@veasel

Ich hab den Beitrag schon gelesen, ich wusste jedoch nicht dass ich das ServiceProcess zu meinen Referenzen hinzufügen kann.

Lg Chriss