构建Windows服务最简单的语言是什么?
在这种情况下最简单的定义为最少的代码量和最低的语言输入点。
答案 0 :(得分:176)
冒着明显的风险,如果你有任何C / C ++ / Java背景,我认为C#为你提供了最低的入口点。
假设您使用的是Visual Studio 2008,则可以按照以下步骤操作:
false
以防止事件默认写入应用程序事件日志(注意:我不是说您不应该记录服务事件;我只是想写入我自己的事件日志而不是应用程序日志 - 见下文)true
true
,则还需要覆盖OnShutdown方法。我在下面创建了一个示例,说明了这些函数的用法。using System.Diagnostics;
[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
public ProjectInstaller()
{
InitializeComponent();
EventLogInstaller installer = FindInstaller(this.Installers);
if (installer != null)
{
installer.Log = "ServiceExample"; // enter your event log name here
}
}
private EventLogInstaller FindInstaller(InstallerCollection installers)
{
foreach (Installer installer in installers)
{
if (installer is EventLogInstaller)
{
return (EventLogInstaller)installer;
}
EventLogInstaller eventLogInstaller = FindInstaller(installer.Installers);
if (eventLogInstaller != null)
{
return eventLogInstaller;
}
}
return null;
}
}
此时,您可以构建项目以获取Windows服务可执行文件。要安装服务,请打开Visual Studio 2008命令提示符,然后导航到可执行文件所在的Debug或Release目录。在命令提示符下,键入以下内容: InstallUtil ServiceExample.exe 。这将在本地计算机上安装您的服务。要卸载它,请在命令提示符下键入以下内容: InstallUtil / u ServiceExample.exe
只要您的服务未运行,您就可以对服务进行更改并重新构建,即您不必卸载服务即可对其进行更改。但是,只要它正在运行,您将无法使用修复程序和增强功能覆盖可执行文件。
要查看您的服务,请打开ServiceExample.cs文件并进行以下更改:
using System.Diagnostics;
public partial class ServiceExample : ServiceBase
{
public ServiceExample()
{
// Uncomment this line to debug the service.
//Debugger.Break();
InitializeComponent();
// Ties the EventLog member of the ServiceBase base class to the
// ServiceExample event log created when the service was installed.
EventLog.Log = "ServiceExample";
}
protected override void OnStart(string[] args)
{
EventLog.WriteEntry("The service was started successfully.", EventLogEntryType.Information);
}
protected override void OnStop()
{
EventLog.WriteEntry("The service was stopped successfully.", EventLogEntryType.Information);
}
protected override void OnShutdown()
{
EventLog.WriteEntry("The service was shutdown successfully", EventLogEntryType.Information);
}
}
使用这些更改运行服务后,您可以在事件查看器中查看ServiceExample事件日志,并查看其中记录的消息。
希望这有帮助。
编辑:如果您希望将事件日志记录用于事件日志记录而不是自定义事件日志,则只需对ProjectInstaller.cs文件不进行任何更改。此外,省略在ServiceExample构造函数中设置EventLog的Log属性的行。运行服务时,日志消息将显示在应用程序事件日志中。
答案 1 :(得分:4)
我同意在其他地方做出回应的所有人,但我会说不要过分关注实际的语言,只要你在.NET框架中工作,并且有一个启动项目,你'好好去。我以前做过几个“Windows服务”,用VB.NET和C#开发它们,代码很少。
我建议OP做的是学习如何为它构建安装程序包。安装服务就像执行“installutil.exe {drive} \ path \ to \ file.exe”一样简单,但是当你必须做大于部署“hello world”Windows服务的任何事情时,最好知道并理解以有意义的方式部署服务。
不要开始一场火焰战,但我已经“标准化”使用WiX用于我所有的部署包,除了做老式的COM互操作类型的东西,因为这是工作的首要任务正确安装。我急于让WiX团队开发引导程序,允许您将先决条件和主要msi放入可下载的EXE文件中。他们预定它为3.5,所以我耐心等待,现在使用WinZip Self-Extracting可执行文件。
答案 2 :(得分:0)
对我而言,我只尝试了几种方式,Visual Studio和C#是最简单的。
Visual Studio为框架完成了所有必要的服务管道设置,我发现C#非常容易学习,从VB6,VB.NET和C迁移。
答案 3 :(得分:0)
使用Visual C#,您可以在网上找到最多的代码示例。 结合Visual Studio,它是在公园散步,以启动和运行基本的Windows服务。 Visual Studio还可以轻松创建MSI安装程序包。
那将是我的选择
答案 4 :(得分:0)
使用Visual Studio服务类型项目,使用C#或VB.NET。
我个人更喜欢C#,但总的来说,很容易理解生命周期并在理想的阶段对逻辑进行编码。
构建安装程序也非常简单。
答案 5 :(得分:0)
C#中的Windows服务项目将通过单击按钮从Visual Studio模板为您提供完全可部署的服务。您只需添加有效负载代码。