我正在尝试使用 C# 制作 Windows 服务。
我的问题是我只有 Visual Studio Express 2010,所以我无法生成“服务应用程序”。我的控制台应用程序正在运行,我使用 Inno Setup 将其安装为服务。
但是,当然,服务没有开始。所以我的问题是,控制台应用程序和 Windows 服务之间的编码差异是什么 - 我必须做些什么才能使我的应用程序作为服务工作。
谢谢
我正在尝试使用 C# 制作 Windows 服务。
我的问题是我只有 Visual Studio Express 2010,所以我无法生成“服务应用程序”。我的控制台应用程序正在运行,我使用 Inno Setup 将其安装为服务。
但是,当然,服务没有开始。所以我的问题是,控制台应用程序和 Windows 服务之间的编码差异是什么 - 我必须做些什么才能使我的应用程序作为服务工作。
谢谢
我强烈建议您查看TopShelf将您的控制台应用程序转换为 Windows 服务。所需的代码更改非常少;本质上
public class Service
{
public void Start()
{
// your code when started
}
public void Stop()
{
// your code when stopped
}
}
public class Program
{
public static void Main()
{
HostFactory.Run(x =>
{
x.Service<Service>(s =>
{
s.ConstructUsing(name=> new Service());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("My service description");
x.SetDisplayName("ServiceName");
x.SetServiceName("ServiceName");
});
}
}
然后从命令行安装它
service.exe install
我们使用这些方面的东西:
using System.ServiceProcess;
using System.Diagnostics;
using System;
namespace MyApplicationNamespace
{
static class Program
{
static void Main(string[] args)
{
if (args != null && args.Length > 0)
{
switch (args[0])
{
case "-debug":
case "-d":
StartConsole();
break;
default:
break;
}
}
else
{
StartService();
}
}
private static void StartConsole()
{
MyApp myApp = new MyApp();
myApp.StartProcessing();
Console.ReadLine();
}
private static void StartService()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new MyApp() };
ServiceBase.Run(ServicesToRun);
}
}
}
MyApp 将继承自
System.ServiceProcess.ServiceBase
然后,您可以使用
installutil app.exe
要从控制台运行,只需使用 -d 或 -debug 开关。