Como regla del pulgar de los servicios no debe tener ningún tipo de interfaz de usuario. Esto se debe a que los servicios generalmente se ejecutan con privilegios muy altos y pueden ocurrir cosas malas si no se es muy cuidadoso con sus entradas. (Creo que las versiones más nuevas de Windows no le permitirán crear UI desde un servicio, pero no estoy 100% seguro.)
Si necesita comunicarse con un servicio, debe usar alguna forma de IPC (WCF, tubos, tomas de corriente, ...). Si quieres un programa de consola simple que también puede ser un servicio, no conozco un truco para poner esto en marcha:
class MyExampleApp : ServiceBase
{
public static void Main(string[] args)
{
if (args.Length == 1 && args[0].Equals("--console"))
{
new MyExampleApp().ConsoleRun();
}
else
{
ServiceBase.Run(new MyExampleApp());
}
}
private void ConsoleRun()
{
Console.WriteLine(string.Format("{0}::starting...", GetType().FullName));
OnStart(null);
Console.WriteLine(string.Format("{0}::ready (ENTER to exit)", GetType().FullName));
Console.ReadLine();
OnStop();
Console.WriteLine(string.Format("{0}::stopped", GetType().FullName));
}
//snip
}
Si usted acaba de empezar el programa, se pondrá en marcha como un servicio (y grito a usted si lo ejecuta desde la consola), pero si agrega el parámetro --console
cuando lo inicia, el programa se iniciará y esperará que presione enter para cerrar.
Esto está bien para la CLI y el Servicio. –
Gracias por el código. Debes profundizar un poco más en los Servicios para comprender la parte de OnStop. – Remy