1

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

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

我尝试了一个更简单的方法在这里找到。我.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上述文件是否有任何理由不会向msconfig名为“MyService”的项目添加项目?

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

4

3 回答 3

3

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

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

  • 将密钥添加ServiceNameHKEY_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(通常是本地系统)
    • Start - REG_DWORD - 2 (decimal)(这取决于所需的启动行为)
    • Type - REG_DWORD - 16 (decimal)

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

只需在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\密钥内部扎根即可获得更多示例!

于 2018-07-11T19:46:00.300 回答
2

如果您想以管理权限运行程序,还有另一种方法,而不是使用服务。

您可以使用任务计划程序,例如.

命令行也可用:SCHTASKS /create

于 2011-09-19T06:16:06.873 回答
1

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

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

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

于 2011-09-19T02:38:34.397 回答