用于创buildWindows服务的最简单的语言
build立Windows服务的最简单的语言是什么?
在这种情况下,最简单的方法就是定义最less量的代码和进入语言的最低点。
如果您有明显的风险,如果您有任何C / C ++ / Java背景,我认为C#为您提供了最低的入口点。
假设您使用Visual Studio 2008,您可以按照下列步骤操作:
- 打开Visual Studio 2008,然后selectFile | New | Project菜单选项。
- 在“新build项目”对话框中…
- 在项目types中selectVisual C#| Windows节点
- selectWindows服务模板
- input您的项目的名称和位置
- 按OK
- 在这一点上,你有Windows服务的所有基础知识。 Program.cs文件包含您的服务的Main()方法,Service1.cs定义了您的新Windows服务的System.ServiceProcess.ServiceBase组件。
- 在您的Service1组件的属性网格中,请考虑至less设置以下属性:
- (名称) – 给你的对象一个直观的名字,例如,ServiceExample
- AutoLog – 设置为
false
以防止事件被默认写入到应用程序事件日志中(注意:我不是说你不应该logging服务事件;我只是喜欢写我自己的事件日志而不是应用程序日志 – 参见下面) - CanShutdown – 如果要处理系统closures,则设置为
true
- ServiceName – 定义服务将被服务控制pipe理器(SCM)所知道的名称
- 在ServiceExample的代码中,OnStart()和OnStop()虚拟函数被删除。 无论您的服务需要做什么,您都需要填写这些信息。 如果将CanShutdown属性更改为
true
,则还需要重写OnShutdown方法。 我已经在下面创build了一个示例来演示如何使用这些函数。 - 此时,ServiceExample服务基本完成,但您仍然需要一种方法来安装它。 为此,请在devise器中打开ServiceExample组件。 右键单击devise器面板中的任意位置,然后select“添加安装程序”菜单选项。 这会将一个ProjectInstaller组件添加到您的项目中,该项目包含两个附加组件 – serviceProcessInstaller1和serviceInstaller1。
- 在devise器中selectserviceProcessInstaller1组件。 在属性网格中,考虑设置以下属性:
- (名称) – 给你的对象一个直观的名字,例如serviceProcessInstaller
- 帐户 – selectLocalService帐户作为最低要求,但是如果您的服务需要更多权限,则可能必须使用NetworkService或LocalSystem帐户
- 在devise器中selectserviceInstaller1组件。 在属性网格中,考虑设置以下属性:
- (Name) – 给你一个直观的名字,比如serviceInstaller
- 描述 – 将在SCM中显示的服务描述
- DisplayName – 您的服务的友好名称,它将显示在您的服务的SCM中
- ServiceName – 确保这是与您的ServiceExample组件的ServiceName属性相同的名称(请参阅步骤4)
- StartType – 指示您是否希望自动或手动启动服务
- 请记住,我说我宁愿写事件到我自己的事件日志,而不是应用程序事件日志。 要做到这一点,您需要用自定义replaceProjectInstaller中的默认EventLogInstaller。 使你的ProjectInstaller的代码如下所示:
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; } }
在这一点上,你可以build立你的项目来让你的Windows服务可执行。 要安装服务,请打开Visual Studio 2008命令提示符,然后导航到可执行文件所在的Debug或Release目录。 在命令提示符处,键入以下内容: InstallUtil ServiceExample.exe 。 这将在本地机器上安装你的服务。 要卸载它,请在命令提示符下键入以下内容: InstallUtil / u ServiceExample.exe
只要你的服务没有运行,你可以修改你的服务并重新构build,也就是说,你不必卸载你的服务来修改它。 但是,只要它正在运行,您将无法使用修复程序和增强function覆盖可执行文件。
要查看您的服务,请打开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事件日志,并查看在那里logging的消息。
希望这可以帮助。
编辑:如果您喜欢使用应用程序事件日志而不是自定义事件日志logging,只需不更改ProjectInstaller.cs文件。 另外,在ServiceExample构造函数中省略设置EventLog的Log属性的行。 运行服务时,日志消息将显示在应用程序事件日志中。
我同意所有在其他地方做出回应的人,但是我认为不要太在意实际的语言,只要你在.NET框架中工作,并且有一个启动项目给你,你很好走。 过去我已经完成了几个“Windows服务”,并使用VB.NET和C#开发它们,只需要最less的代码。
我build议OP要做的是学习如何为其构build安装程序包。 安装服务与执行“installutil.exe {驱动器} \path\到\ file.exe”一样简单,但是当您必须做大于部署“hello world”Windows服务的任何事情时,最好了解和理解以有意义的方式部署服务。
不要开始一场激烈的战争,但是我已经对使用WiX的所有部署包进行了“标准化”,除了老式的COM interoptypes之外,因为这是正确安装的首要工作。 我很期待WiX团队开发引导程序,让您可以将必备条件和主要的msi放入可以下载的EXE文件中。 他们已经预定了3.5,所以我会耐心等待,现在就使用WinZip Self-Extracting可执行文件。
对我而言,我只是尝试了几种方法,Visual Studio和C#是最简单的。
Visual Studio为框架做了所有必要的服务pipe道设置,我发现C#非常容易学习,从VB6,VB.NET和C迁移。
使用Visual C#,您可以在网上find最多的代码示例。 与Visual Studio结合在一起,在公园里散步以获得基本的Windows服务。 Visual Studio还可以创build一个MSI安装程序包。
这将是我的select
C#中的Windows服务项目将通过单击button为您提供Visual Studio模板中的完全可部署的服务。 你只需要添加你的有效载荷代码。
使用Visual Studio服务types项目,使用C#或VB.NET。
我个人更喜欢C#,但总的来说,很容易理解生命周期,并在理想阶段对逻辑进行编码。
构build安装程序也非常简单。