Как правило, сервисы большого пальца никогда не должны иметь какого-либо пользовательского интерфейса.Это происходит потому, что службы обычно работают с очень высокими привилегиями, и могут случиться плохие вещи, если вы не будете очень осторожны со своими данными.(Я думаю, что новейшие версии Windows вообще не позволят вам создавать пользовательский интерфейс из службы, но я не уверен на 100%.)
Если вам необходимо связаться со службой, вам следует использовать некоторую формуIPC (WCF, трубы, розетки, ...).Если вы хотите простую консольную программу, которая также может быть службой, я знаю хитрость для ее установки:
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
}
Если вы просто запустите программу, она запустится как служба (и выЕсли вы запустите его из консоли), но если вы добавите параметр --console
при запуске, программа запустится и будет ждать, пока вы нажмете Enter, чтобы закрыть.