我有一个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界面。
答案 0 :(得分:2)
答案 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\
键内部扎根,即可获得更多示例!