用于创buildWindows服务的最简单的语言

build立Windows服务的最简单的语言是什么?

在这种情况下,最简单的方法就是定义最less量的代码和进入语言的最低点。

如果您有明显的风险,如果您有任何C / C ++ / Java背景,我认为C#为您提供了最低的入口点。

假设您使用Visual Studio 2008,您可以按照下列步骤操作:

  1. 打开Visual Studio 2008,然后selectFile | New | Project菜单选项。
  2. 在“新build项目”对话框中…
    • 在项目types中selectVisual C#| Windows节点
    • selectWindows服务模板
    • input您的项目的名称和位置
    • 按OK
  3. 在这一点上,你有Windows服务的所有基础知识。 Program.cs文件包含您的服务的Main()方法,Service1.cs定义了您的新Windows服务的System.ServiceProcess.ServiceBase组件。
  4. 在您的Service1组件的属性网格中,请考虑至less设置以下属性:
    • (名称) – 给你的对象一个直观的名字,例如,ServiceExample
    • AutoLog – 设置为false以防止事件被默认写入到应用程序事件日志中(注意:我不是说你不应该logging服务事件;我只是喜欢写我自己的事件日志而不是应用程序日志 – 参见下面)
    • CanShutdown – 如果要处理系统closures,则设置为true
    • ServiceName – 定义服务将被服务控制pipe理器(SCM)所知道的名称
  5. 在ServiceExample的代码中,OnStart()和OnStop()虚拟函数被删除。 无论您的服务需要做什么,您都需要填写这些信息。 如果将CanShutdown属性更改为true ,则还需要重写OnShutdown方法。 我已经在下面创build了一个示例来演示如何使用这些函数。
  6. 此时,ServiceExample服务基本完成,但您仍然需要一种方法来安装它。 为此,请在devise器中打开ServiceExample组件。 右键单击devise器面板中的任意位置,然后select“添加安装程序”菜单选项。 这会将一个ProjectInstaller组件添加到您的项目中,该项目包含两个附加组件 – serviceProcessInstaller1和serviceInstaller1。
  7. 在devise器中selectserviceProcessInstaller1组件。 在属性网格中,考虑设置以下属性:
    • (名称) – 给你的对象一个直观的名字,例如serviceProcessInstaller
    • 帐户 – selectLocalService帐户作为最低要求,但是如果您的服务需要更多权限,则可能必须使用NetworkService或LocalSystem帐户
  8. 在devise器中selectserviceInstaller1组件。 在属性网格中,考虑设置以下属性:
    • (Name) – 给你一个直观的名字,比如serviceInstaller
    • 描述 – 将在SCM中显示的服务描述
    • DisplayName – 您的服务的友好名称,它将显示在您的服务的SCM中
    • ServiceName – 确保这是与您的ServiceExample组件的ServiceName属性相同的名称(请参阅步骤4)
    • StartType – 指示您是否希望自动或手动启动服务
  9. 请记住,我说我宁愿写事件到我自己的事件日志,而不是应用程序事件日志。 要做到这一点,您需要用自定义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安装程序也非常简单。