13

Я создал службу Windows для сервера Tomcat, и он работает нормально, но теперь я хочу изменить имя службы, не удаляя ее.

так есть ли какие-либо шаги cmd\GUI, чтобы изменить имя службы?

2 ответа2

21

Ответ @ 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
);
19

Программа командной строки 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")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .