Actualmente estoy escribiendo un pequeño código de arranque para un servicio que se puede ejecutar en la consola. Básicamente se reduce a llamar al método OnStart() en lugar de usar el ServiceBase para iniciar y detener el servicio (porque no ejecuta la aplicación si no está instalada como un servicio y hace que la depuración sea una pesadilla).Estoy ejecutándose como un servicio
En este momento estoy usando Debugger.IsAttached para determinar si debo usar ServiceBase.Run o [service] .OnStart, pero sé que no es la mejor idea porque algunas veces los usuarios finales quieren ejecutar el servicio de una consola (para ver la salida, etc. en tiempo real).
¿Alguna idea sobre cómo podría determinar si el controlador de servicio de Windows comenzó 'yo', o si el usuario comenzó 'yo' en la consola? Aparentemente Environment.IsUserInteractive no es la respuesta. Pensé en usar argumentos de línea de comando, pero parece "sucio".
Siempre pude ver acerca de una declaración try-catch en ServiceBase.Run, pero parece sucio. Editar: prueba de captura no funciona.
tengo una solución: ponerlo aquí para todos los demás interesados apiladores:
public void Run()
{
if (Debugger.IsAttached || Environment.GetCommandLineArgs().Contains<string>("-console"))
{
RunAllServices();
}
else
{
try
{
string temp = Console.Title;
ServiceBase.Run((ServiceBase[])ComponentsToRun);
}
catch
{
RunAllServices();
}
}
} // void Run
private void RunAllServices()
{
foreach (ConsoleService component in ComponentsToRun)
{
component.Start();
}
WaitForCTRLC();
foreach (ConsoleService component in ComponentsToRun)
{
component.Stop();
}
}
EDIT: No había otra pregunta en StackOverflow donde el chico tenía problemas con el Environment.CurrentDirectory ser "C: \ Windows \ System32 "parece que esa puede ser la respuesta. Voy a probar hoy.
Gracias Dor adición de la solución, debe ser una referencia útil. – Ash
No es que IsUserInteractive * no * devuelva falso para aplicaciones de consola, como se indicó en el enlace que proporcionó anteriormente, al menos no en general. Lo estoy usando para ese propósito y nunca tuve ningún problema con él. –
[Aquí está la misma pregunta para C++] (https://stackoverflow.com/questions/1974828/) –