如何在创建 Windows 服务后更改其名称

如何在创建 Windows 服务后更改其名称

我已经为 tomcat 服务器创建了 Windows 服务并且运行良好,但现在我想在不删除它的情况下更改服务名称。

那么是否有任何 cmd\GUI 步骤可以更改服务名称?

答案1

@bfhd 的回答如果您只想更改显示名称(即 中的列表所显示的名称Services.msc,但不是“真实”服务名称(即包含服务信息的注册表项的名称,并在 等 API 中使用OpenService),则可以使用此方法。这篇 MSDN 文章进一步讨论服务名称与显示名称。

不幸的是,没有官方的方法来更改服务的名称。不过,如果你绝对必须重命名服务,而不是出于某种原因以新名称重新安装。请执行以下操作:

  1. 停止服务。如果你在正在运行的服务上执行此操作,你可能会让服务控制管理器感到困惑。(无论如何你都可能会感到困惑,这是非常不礼貌的。)
  2. 打开regedit.exe(注册表编辑器)。
  3. 导航HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services并找到具有您的服务名称的子项。
  4. 右键单击您在步骤 3 中找到的键,然后选择重命名。输入服务的新名称。
  5. 重新启动计算机。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"

相关内容