为了账号安全,请及时绑定邮箱和手机立即绑定

创建Windows服务的最简单语言

创建Windows服务的最简单语言

慕容森 2019-06-25 13:58:33
创建Windows服务的最简单语言构建Windows服务最简单的语言是什么?在这种情况下,最简单的定义是代码数量最少,以及语言的最低入口点。
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

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

假设您使用的是VisualStudio 2008,则可以执行以下步骤:

  1. 打开VisualStudio 2008,并选择FilesNewNewProject菜单选项。
  2. 在“新项目”对话框中.。
    • 在项目类型中选择VisualC#000-Windows节点
    • 选择WindowsService模板
    • 输入项目的名称和位置
    • 按OK
  3. 此时,您已经掌握了Windows服务的所有基础知识。cs文件包含服务的main()方法,Service1.cs定义System.ServiceProcess.ServiceBase组件,这是新的Windows服务。
  4. 在Service1组件的属性网格中,考虑至少设置以下属性:
    • (名称)-给你的对象一个直观的名称,例如,Service示例
    • Autolog-设置为

      false

      为了防止事件默认地写入应用程序事件日志(注意:我不是说您不应该记录服务事件;我只是更喜欢编写自己的事件日志而不是应用程序日志-请参见下面)
    • 倒计时-设置为

      true

      如果您想处理系统关闭
    • ServiceName-定义服务控制管理器(SCM)将知道您的服务的名称
  5. 在ServiceExsquare的代码中,将删除OnStart()和OnStop()虚拟函数。显然,您需要用任何您的服务需要做的事情来填充这些内容。如果将“倒计时”属性更改为

    true

    ,您也需要重写OnShu倒计时方法。我在下面创建了一个示例,说明这些函数的使用情况。
  6. 此时,ServiceExmen服务基本上已经完成,但是您仍然需要一种方法来安装它。为此,请在设计器中打开ServiceExmen组件。右键单击“设计器”面板中的任何位置,并选择“添加安装程序”菜单选项。这将向项目添加一个ProjectInstaller组件,该组件包含两个附加组件-serviceProcessInstaller1和serviceInstaller1。
  7. 在设计器中选择serviceProcessInstaller1组件。在属性网格中,考虑设置以下属性:
    • (Name)-给对象一个直观的名称,例如serviceProcessInstaller
    • 帐户-至少选择LocalService帐户,但如果服务需要更多特权,则可能必须使用NetworkService或LocalSystem帐户
  8. 在设计器中选择serviceInstaller1组件。在属性网格中,考虑设置以下属性:
    • (名称)-给对象一个直观的名称,例如serviceInstaller
    • 描述-该服务的描述将显示在您的服务的SCM中
    • DisplayName-您的服务的友好名称,它将显示在您的服务的SCM中
    • ServiceName-确保这是您为ServiceExfacum组件的ServiceName属性选择的相同名称(请参见步骤4)
    • StartType-指示您希望服务是自动启动还是手动启动
  9. 请记住,我说过我更喜欢编写事件而不是自己的事件日志,而不是应用程序事件日志。为此,需要将ProjectInstaller中的默认EventLogInstaller替换为自定义的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;
    }
}

此时,您可以构建项目以获得Windows服务可执行文件。若要安装服务,请打开VisualStudio 2008命令提示符,并导航到可执行文件所在的“调试”或“发布”目录。在命令提示符下,键入以下内容:InstallUtil ServiceExamp e.exe..这将在本地计算机上安装您的服务。要卸载它,请在命令提示符下键入以下内容:InstallUtil/u ServiceExamp e.exe

只要您的服务没有运行,您就可以对您的服务进行更改并重新构建,也就是说,您不必卸载您的服务才能对其进行更改。但是,只要可执行文件运行,您将无法用修复和增强覆盖可执行文件。

若要查看您的服务正在运行,请打开ServiceExprese.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);
    }
}

在使用这些更改运行服务之后,您可以查看事件查看器中的ServiceExsquare事件日志,并查看在那里记录的消息。

希望这能帮上忙。

编辑:如果您喜欢使用应用程序事件日志来记录事件,而不是使用自定义日志,那么只需对ProjectInstaller.cs文件不做任何更改即可。此外,省略了在ServiceExsample构造函数中设置EventLog的Log属性的行。运行服务时,日志消息将出现在应用程序事件日志中。


查看完整回答
反对 回复 2019-06-25
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

我同意所有在其他地方做出响应的人,但我要说,只要您在.NET框架中工作,并且有一个初学者项目,您就可以继续工作,不要过多地关注实际语言。我过去做过几次“Windows服务”,并且用最少的代码在VB.NET和C#中开发了它们。

我建议OP做的是学习如何为它构建安装程序包。安装该服务就像执行“installutil.exe{驱动器}\path\to\file.exe”一样容易,但是当您必须执行比部署“hello world”Windows服务更大的操作时,了解并了解如何以有意义的方式部署该服务是很好的。

不是为了发动一场火焰之战,但我已经“标准化”了使用维克斯对于我所有的部署包,除了做旧式的com互操作之外,因为要正确安装是最主要的工作。我迫切希望Wix团队开发引导程序,允许您将先决条件和主MSI放入一个EXE文件中,以便下载。他们把它定在3.5,所以我会耐心等待,现在使用WinZip自解压可执行文件。


查看完整回答
反对 回复 2019-06-25
?
一只名叫tom的猫

TA贡献1906条经验 获得超2个赞

使用Visualc#,您将在网络上找到最多的代码示例。与VisualStudio相结合,这是在公园里散步,以获得一个基本的Windows服务的启动和运行。VisualStudio还可以快速创建MSI安装程序包。

那将是我的选择


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 565 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信