我已经为 tomcat 服务器创建了 Windows 服务并且运行良好,但现在我想在不删除它的情况下更改服务名称。
那么是否有任何 cmd\GUI 步骤可以更改服务名称?
答案1
@bfhd 的回答如果您只想更改显示名称(即 中的列表所显示的名称Services.msc
,但不是“真实”服务名称(即包含服务信息的注册表项的名称,并在 等 API 中使用OpenService
),则可以使用此方法。这篇 MSDN 文章进一步讨论服务名称与显示名称。
不幸的是,没有官方的方法来更改服务的名称。不过,如果你绝对必须重命名服务,而不是出于某种原因以新名称重新安装。请执行以下操作:
- 停止服务。如果你在正在运行的服务上执行此操作,你可能会让服务控制管理器感到困惑。(无论如何你都可能会感到困惑,这是非常不礼貌的。)
- 打开
regedit.exe
(注册表编辑器)。 - 导航
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
并找到具有您的服务名称的子项。 - 右键单击您在步骤 3 中找到的键,然后选择重命名。输入服务的新名称。
- 重新启动计算机。
Services.exe
,托管服务控制管理器的进程,除非您这样做,否则将看不到更改;尝试启动重命名的进程(或者实际上以其他方式与其交互)将会失败。
我不保证这种方法一定有效。但如果出于某种原因,仅仅用新名称重新安装服务实在不可接受,那么这种方法可能值得一试。
如果你必须以编程方式执行此操作,那么可能RegRenameKey
存在一个可以为你完成上述第四步的函数。我强调可能之所以存在,是因为据我所知,这个函数完全是非官方的;它不在 MSDN 中,而且关于它的信息很少。除了 Windows 标头(它有原型,并表明它只在 Vista - NT6.0 - 及更新版本中)之外,我发现的唯一东西是Sysinternals 论坛帖子,这表明它调用了 NT 系统调用(同样未记录)。函数原型来自 ,WinReg.h
是
WINADVAPI
LSTATUS
APIENTRY
RegRenameKey(
_In_ HKEY hKey,
_In_opt_ LPCWSTR lpSubKeyName,
_In_ LPCWSTR lpNewKeyName
);
答案2
更改服务的 Windows 命令行程序是“sc”。
以下是 Microsoft 的参考页面:https://technet.microsoft.com/en-us/library/bb490995.aspx
要更改服务的显示名称,您可以运行:
sc config "Old service name" displayname= "New service name"
要更改可执行文件,您可以运行:
sc config "Service name" binpath= "C:\path\to\executable\here"
对于这两个命令,请确保 = 和新名称之间有一个空格(即displayname= "New Name"
,不是 displayname="New Name"
)