Hi,
kurz zum Hintergund.
Wir haben in der Produktion einen Touch PC hängen, an dem Mitarbeiter Maschinen Stillstände in einer Excelliste erfassen.
Viele dieser Mitarbeiter sind nicht wirklich Firm im Umgang mit dem PC, daher müssen wir es Ihnen so einfach wie möglich machen.
Ebenso gibt es Mitarbeiter, die gerne mal so PC nutzen um im Internet zu surfen...
Daher ist der PC so konfiguriert, das beim Starten lediglich Excel gestartet wird.
Wird Excel beendet, ist kein Zugriff auf das Windows unten drunter möglich und die IT muss dann per Remote Excel wieder starten.
Daher habe ich mir einen kleinen Dienst erstellt, der prüft ob Excel beendet wurde und dann Excel wieder starten soll.
Gestalte ich das ganze als Consolenanwendung läuft es ohne Probleme.
Allerdings habe ich ja dann das Konsolenfenster. wenn dies geschloßen wird, wird Excel wieder nicht gestartet.
Daher der Dienst.
Der Dienst selbst hat allerdings Probleme zu starten, es kommt immer ein Timeout.
Hier mal der Code dazu:
DienstInstallerKlasse
ServiceBase
Was mach ich denn da falsch?
kurz zum Hintergund.
Wir haben in der Produktion einen Touch PC hängen, an dem Mitarbeiter Maschinen Stillstände in einer Excelliste erfassen.
Viele dieser Mitarbeiter sind nicht wirklich Firm im Umgang mit dem PC, daher müssen wir es Ihnen so einfach wie möglich machen.
Ebenso gibt es Mitarbeiter, die gerne mal so PC nutzen um im Internet zu surfen...
Daher ist der PC so konfiguriert, das beim Starten lediglich Excel gestartet wird.
Wird Excel beendet, ist kein Zugriff auf das Windows unten drunter möglich und die IT muss dann per Remote Excel wieder starten.
Daher habe ich mir einen kleinen Dienst erstellt, der prüft ob Excel beendet wurde und dann Excel wieder starten soll.
Gestalte ich das ganze als Consolenanwendung läuft es ohne Probleme.
Allerdings habe ich ja dann das Konsolenfenster. wenn dies geschloßen wird, wird Excel wieder nicht gestartet.
Daher der Dienst.
Der Dienst selbst hat allerdings Probleme zu starten, es kommt immer ein Timeout.
Hier mal der Code dazu:
C#-Quellcode
- using System.ComponentModel;
- using System.Configuration.Install;
- using System.ServiceProcess;
- namespace ProcessMonitoring
- {
- [RunInstaller(true)]
- public class MonitorInstaller :Installer
- {
- private ServiceInstaller _Service;
- private ServiceProcessInstaller _Process;
- public MonitorInstaller()
- {
- _Service = new ServiceInstaller();
- _Process = new ServiceProcessInstaller();
- _Process.Account = ServiceAccount.LocalSystem;
- _Service.ServiceName = "ProcessMonitoring";
- _Service.DisplayName = "Process Monitoring";
- _Service.Description = "Überwachung eines bestimmten Prozesses und ggf. Neustart nach Beendigung";
- _Service.StartType = ServiceStartMode.Automatic;
- Installers.Add(_Process);
- Installers.Add(_Service);
- }
- }
- }
C#-Quellcode
- using System.Diagnostics;
- using System.ServiceProcess;
- using System.Threading;
- namespace ProcessMonitoring
- {
- public class Monitor : ServiceBase
- {
- private Process _Process;
- public static void Main(string[] args)
- {
- Run(new Monitor());
- }
- protected override void OnStart(string[] args)
- {
- _Process = new Process();
- _Process.StartInfo.FileName = "Excel.exe";
- _Process.Start();
- while (IsRunning())
- {
- Thread.Sleep(1000);
- }
- }
- bool IsRunning()
- {
- if (_Process.HasExited)
- _Process.Start();
- return true;
- }
- }
- }
Was mach ich denn da falsch?
"Hier könnte Ihre Werbung stehen..."