通过REG或命令行创建Windows启动服务

时间:2011-09-19 00:29:24

标签: windows service registry startup administrator

我有一个Java程序,它需要是一个以管理员身份运行的启动程序。如果不将其作为服务,似乎无法完成。我尝试过使用HKLM\SYSTEM\CurrentControlSet\Services\Services\MyService。我尝试了类似于Google Updater使用的内容(他们使用...\Services\gupdate)。这个过程没有开始(或者至少它立即停止,我无法确定。

我认为我使用注册表的方式有问题,因为该服务未显示在服务选项卡下的msconfig.exe中。此外,它不会显示在控制面板“查看本地服务”(Windows 7,在“开始”菜单中搜索“服务”)

我尝试了much simpler approach found here。我创建了一个包含这些内容的.reg文件。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService]
"Description"="My Service starts the Special Process."

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Parameters]
"Application"="C:\\Test\\MyProcess.cmd"

如果有必要,我愿意考虑替代命令行替代方案,但我喜欢注册表方法,因为如果我告诉安装程序添加某些注册表项,它会在卸载时自动删除这些项。

上述.reg文件是否有任何理由不会将项目添加到名为“MyService”的msconfig

我写的程序是用Java编写的。它没有GUI界面。

3 个答案:

答案 0 :(得分:2)

如果您想运行具有管理权限的程序,则可以采用其他方式代替使用服务。

您可以使用任务计划程序for example

命令行也可用:SCHTASKS / create

答案 1 :(得分:1)

您无法通过操纵注册表来创建服务。你也不能将任意应用程序作为服务运行。

要从服务中运行任意程序,请使用Windows Server 2003 resource kit中提供的srvany.exe服务。有关说明,请参阅KB137890。如果您想编写自己的服务,请参阅this

要创建服务,您可以使用sc命令行工具或Windows Server 2003资源工具包中的instsrv.exe工具。或者使用CreateService Win32 API函数。

答案 2 :(得分:1)

可以通过编辑注册表来创建服务,但是(很明显)您必须具有与该服务关联的服务可执行文件Reg Add将允许添加这些键/值。

在识别服务之前,必须由系统重新加载注册表,我发现重新启动才能完成工作。

  • 将密钥ServiceName添加到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
  • 接下来,在ServiceName键中添加以下值:
    • DisplayName - REG_SZ - Sample Service
    • Description - REG_SZ - This Service is the Hello World Service!
    • ErrorControl - REG_DWORD - 1 (decimal)
    • ImagePath - REG_EXPAND_SZ - C:\ProgramData\Program\service_executable.exe
    • ObjectName - REG_SZ - Username_For_Execution(通常是LocalSystem)
    • Start - REG_DWORD - 2 (decimal)(这取决于所需的启动行为)
    • Type - REG_DWORD - 16 (decimal)

以下网站有助于解读各种值的含义:

仅需在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\键内部扎根,即可获得更多示例!