C# Skript zum Starten von Real VNC Server

Stephan78

Ensign
Registriert
Sep. 2010
Beiträge
151
Hallo,

ich habe einen Windows 8.1 -Rechner, auf dem Real VNC Server läuft.
Auf einem anderen Rechner läuft der Real VNC Viewer auf einem Windows 7-Rechner.
Die Verbindung erfolgt über einen WLAN-Router.
Der Viewer stürzt leider hin und wieder ab und ich habe aufrund der Situation,
in der ich den Viewer verwende, keine Möglichkeit, nach Absturz jeweils wieder manuell zu starten.
Auch via Doppelklick auf die gespeicherte VNC-Verbindung auf dem Desktop ist das zu umständlich.
Deshalb möchte ich ein C# Skript, das im Hintergrund läuft und einmal pro Sekunde prüft, ob der viewer noch läuft und falls nicht, die Verbindung zum Server wieder neu startet. Und das, ohne daß ich manuell irgendwas machen muss.

Dafür brauch ich bischen Schützenhilfe - geht das so überhaupt und welchen Code brauch man dafür?
Ich nehme mal an, daß ich das Skript zu einer exe machen muss, dass dann von mir manuell gestartet wird.
 
C# wird nicht geskriptet (Interpreter!) sondern kompiliert. Aber das nur nebenbei.
Schau dir die WINAPI an wenn du es mit C# lösen möchtest.
 
Warum so kompliziert??? Real VNC lässt sich doch auch als Windows Dienst einrichten. Nachdem du das gemacht hast, gehst du in den Dienst-Eigenschaften auf "Wiederherstellungen" und sagst bei allen Fehlern "Dienst neu starten". Den Rest erledigt Windows selbst.
 
C# erstellt dir sowieso ein kompiliertes Programm (EXE).
Windows bietet mit den Windows Management Instrumentation die Win32_ProcessTrace-Klassen, mit denen das Starten und Beenden von Prozessen "beobachtet" werden kann (Watcher).
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceProcess;

namespace ServiceChecker
{
class Program
{
static void Main(string[] args)
{
ServiceController sc = new ServiceController("Dienst der überprüft werden soll");
CheckServiceStatus(sc);
}

private static void CheckServiceStatus(ServiceController sc)
{
switch (sc.Status)
{
case ServiceControllerStatus.Running:
{ break; }
case ServiceControllerStatus.Stopped:
{
//Hier wirds gestartet
sc.Start();
break;
}
case ServiceControllerStatus.Paused:
{ break; }
case ServiceControllerStatus.StopPending:
{ break; }
case ServiceControllerStatus.StartPending:
{ break; }
default:
{ break; }
}
}
}
}
 
Danke für den Tip mit dem Dienst.
Ich habe jetzt mit dieser Anleitung

http://www.howtodo-it.de/howtos/Software/microsoft/windows-xp-2000/Programm-als-Dienst-starten

in WIn7 einen Dienst definiert, der die vncviewe.exe starten soll.

Wenn ich den Dienst allerdings starte, passiert nichts, d.h., im Taskmanager ist
die exe nicht zu sehen, das Programm selber startet auch nicht.

Woran kann das liegen? Ich mach alles in einem Admin-Konto.

Als Endergebnis hätte ich gern pber die .vnc-Datei, die die Verbindungsdaten enthält, als Dienst gestartet, nicht direkt die exe,
weil dann die Verbindung nicht sofort aufgebaut wird.
Wenn ich diese Datei in den Application-Pfad in der Registry angebe, gibts aber ne Fehlermeldung?
Was tun?
Ergänzung ()

Stratego schrieb:
ServiceController sc = new ServiceController("Dienst der überprüft werden soll");


Muss in die "" der pfad mit der exe-Datei?
In meinem Fall sind die Verbindungsdaten in einer .vnc-Datei gespeichert.
Mit Mausdoppelklick auf diese startet die Verbindung sofort,
wenn ich lediglich die vnc-viewer-exe starte, muss ich manuell noch Eingaben machen, damit die Verbindung wieder
zustande kommt. Das will/muss ich verhindern.
Gibts dazu eine Möglichkeit?
 
Zuletzt bearbeitet:
Zurück
Oben