Halloo!
Ich habe mit C# in Visual Studio 2010 ein Dienst programmiert, welchen ich anschliessend über die Windows-Kommandozeile installiert habe (Mit dem Befehl => “C:\MyService.exe /I”). Der Dienst erschien dann in der Dienstverwaltung, und wurde somit korrekt installiert! Danach habe ich den Dienst manuell starten wollen, jedoch gab mir Windows den Fehler:
“fehler 1053: der dienst antwortete nicht rechtzeitig auf die start- oder steuerungsanforderung”. Ich habe den Dienst auch schon automatisch via Kommandozeile starten wollen, jedoch kam dann in der Kommandozeile der genau gleiche Fehler.
Meinen Code habe ich nach dem klassischen Windows-Service Template - Code von Visual Studio 2010 aufgebaut (Mit “OnStart” Methode usw.). Hier der gesamte Code mit allen Übergabeparametern und mit der Eingabeaufforderung in der Main-Methode usw.:
[CSHARP]
class Program : ServiceBase
{
public static string ServiceName = “MeinDienst”;
public static string ServiceDescription =
“Test…”;
protected override void OnStart(string[] args)
{
}
protected override void Dispose(bool disposing)
{
//clean your resources if you have to => to clean objects who aren't in use anymore.
base.Dispose(disposing);
}
private static bool IsServiceInstalled()
{
return ServiceController.GetServices().Any(s => s.ServiceName == ServiceName);
}
private static void InstallService()
{//Deinstall service if it's already installed
if (IsServiceInstalled())
{
UninstallService();
}
ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
}
private static void UninstallService()
{
ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });
}
static void Main(string[] args)
{
if (args.Length > 0)
{//If an argument (e.q. a user input with cmd) has been done, do an Install or Uninstall
for (int ii = 0; ii < args.Length; ii++)
{
switch (args[ii].ToUpper())
{
case "/I":
InstallService();
return;
case "/U":
UninstallService();
return;
default:
break;
}
}
}
}
}
[/CSHARP]
[CSHARP]
[RunInstaller(true)]
public class CustomServiceInstaller : Installer
{
private ServiceProcessInstaller process;
private ServiceInstaller service;
public CustomServiceInstaller()
{
process = new ServiceProcessInstaller();
process.Account = ServiceAccount.LocalSystem;
service = new ServiceInstaller();
service.ServiceName = Program.ServiceName;
service.Description = Program.ServiceDescription;
[/CSHARP]