服务和注册

时间:2009-09-23 11:47:13

标签: c++ windows

我在理解服务和注册表之间的关系时遇到了问题。

我的任务是使用我的Windows C ++程序并将其从简单的应用程序转换为服务。 我读到我需要产生更多的功能:start stop resume install。 问题是:

  1. 为什么我需要这个注册?

  2. 我如何进入新计划?

  3. 除了那些方法,我需要对注册表做些什么?我是怎么进入里面的?

  4. 我是否需要编写用于输入服务的脚本?

  5. 我读过但我只是不明白,任何answear和/或一些很好的解释链接都将不胜感激。

    谢谢,

2 个答案:

答案 0 :(得分:5)

我不知道服务和注册表之间有任何记录的关系。服务可以使用注册表来存储他们的设置,就像任何其他应用程序一样,但它们不是必需的。

  1. 正式地说,您不需要注册表。您只需使用相关的API函数安装该服务。作为其实现的一部分,API函数创建了操作系统稍后用于了解何时以及如何启动服务的注册表项,但我认为这些密钥没有记录,并且期望开发人员可以手动修改它们,所以不要担心他们。

    但是,如果您的程序使用注册表来存储设置,则需要了解您的服务运行的帐户,因为这会影响您的程序可以访问的注册表区域。

  2. 致电CreateService安装您的服务。在程序的安装程序中执行此操作。当您检测到自己使用某个命令行开关(例如-i)运行时,您也可以自行安装服务。要卸载您的服务,请致电OpenService,然后致电DeleteService。在任何一种情况下,您都需要先致电OpenSCManager。有关如何调用这些函数的更多信息,请参阅MSDN。

    或者,您可以use the sc command to create and delete your service

  3. 如上所述,您无需对注册表执行任何操作。只需使用API​​安装和卸载您的服务,让操作系统负责其余的工作。

  4. 您无需编写任何脚本即可启动服务。操作系统已经知道如何启动它(因为它已安装)。如果您的服务是用户想要经常启动和停止的服务,那么他们可以使用netsc命令而不是使用服务控制面板。

答案 1 :(得分:1)

我们使用注册表来存储命令行参数。可执行文件传递一个特殊的参数,说“你是一个服务,这是你的服务名称”,然后程序知道在注册表中查找并从那里读取其余的命令行参数。老实说,我不知道为什么这样做,但我怀疑服务命令行的长度是有限制的。

然而,正如Rob所说,服务根本没有 来使用注册表。