web-dev-qa-db-ja.com

作成後にWindowsサービス名を変更する方法

Tomcatサーバー用のWindowsサービスを作成しましたが、正常に稼働していますが、今はサービス名を削除せずに変更したいと思います。

サービス名を変更するためのcmd\GUIの手順はありますか?

15

表示名(Services.mscのリストに表示されているものですが、「実際の」サービス名(サービス情報を含むレジストリキーの名前ではない)を変更したいだけの場合は、@ bfhdの回答は有効です) このMSDNの記事 の備考セクションでは、OpenService)などのAPIでサービス名と表示名についてもう少し詳しく説明しています。

残念ながら、サービスの名前を変更する正式な方法はありません。ただし、何らかの理由でサービスを新しい名前で再インストールするのではなく、サービスの名前を絶対にmustに変更した場合は、おそらく可能です。以下をせよ:

  1. サービスを停止してください。実行中のサービスでこれを行うと、おそらくサービスコントロールマネージャを混乱させるでしょう。 (とにかく混乱させるかもしれませんが、これは非常に厄介です。)
  2. regedit.exe(レジストリエディタ)を開きます。
  3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servicesに移動して、サービスの名前を持つサブキーを見つけます。
  4. 手順3で見つけたキーを右クリックして、[名前の変更]を選択します。サービスの新しい名前を入力してください。
  5. コンピュータを再起動してください。サービスコントロールマネージャをホストするプロセスであるServices.exeは、変更しない限り変更を認識しません。名前を変更したプロセスを起動しようとすると(または実際にはまったくやり取りをしようとすると)失敗します。

私はこの作業を約束しません。ただし、何らかの理由でサービスを新しい名前で再インストールするだけでは不十分な場合は、試してみる価値があります。

プログラム的にこれをしなければならない場合、mayRegRenameKeyという関数が存在し、それがあなたのために上記の4番目のステップを実行できます。私はmayが存在することを強調しています。私が言うことができる限り、この関数は完全に非公式です。これはMSDNにはないので、それに関する貴重な小さな情報があります。私が見つけた唯一のものは、Windowsのヘッダー(プロトタイプを持っていて、それがVistaだけにあることを示す - NT6.0以降)以外に、 Sysinternalsフォーラムの投稿 である。それはNTシステムコールを呼び出します(これも文書化されていません)。 WinReg.hからの関数プロトタイプは、

WINADVAPI
LSTATUS
APIENTRY
RegRenameKey(
    _In_ HKEY hKey,
    _In_opt_ LPCWSTR lpSubKeyName,
    _In_ LPCWSTR lpNewKeyName
);
24
CBHacking

サービスを変更するためのWindowsコマンドラインプログラムは "sc"です。

これがMicrosoftのリファレンスページです。 https://technet.Microsoft.com/ja-jp/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"NOTdisplayname="New Name"

20
bfhd