Windowsサービスの「実行可能ファイルへのパス」の変更


253

アプリケーションへのパスを変更したいのですが、サービスがまだ古い場所を指しているため、変更するとパスが壊れます。

に移動するとAdministrative Tools > Services、プロパティダイアログを開いてを表示できますがPath to executable、変更する方法はありません。

ユーザーがアプリケーションを再インストールせずにサービスパスを変更できる方法はありますか?

回答:


245

レジストリを変更する代わりにコマンドラインを使用するSuperUser見られるこのアプローチもありscます:

sc config <service name> binPath= <binary path>

注:後のスペースbinPath=は重要です。次のコマンドを使用して、現在の構成を照会することもできます。

sc qc <service name>

次のような出力が表示されます。

[SC] QueryServiceConfig SUCCESS

SERVICE_NAME:ServiceName

    TYPE               : 10  WIN32_OWN_PROCESS
    START_TYPE         : 2   AUTO_START
    ERROR_CONTROL      : 1   NORMAL
    BINARY_PATH_NAME   : C:\Services\ServiceName
    LOAD_ORDER_GROUP   :
    TAG                : 0
    DISPLAY_NAME       : <Display name>
    DEPENDENCIES       :
    SERVICE_START_NAME : user-name@domain-name

24
レジストリを直接変更するよりも、この方法をお勧めします。多くのパスは、次のようにあなたがMS SQL Serverと、たとえば、入力することができる、引用符で囲まれた文字列を必要とする: sc config mssqlserver binPath= "\"F:\SQL DATA\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe\" -sMSSQLSERVER"
マルク・Durdin

2
また、レジストリを直接変更する方法よりも、展開スクリプトの方がおそらく少し優れています。
Niall Connaughton

甘い。regでいじくるよりもきれい。**注:変更を確認するには、services.mscを閉じて開く必要があります。
ヨンスク、2015

1
使用[SC] QueryServiceConfig FAILED 122:後に取得する場合は、これを参照してくださいsc qc Xsc qc X 1000
ラファエル

13
これをPowerShellから使用するsc.exe場合は、ネイキッドではなくを使用してくださいsc
フィアット

292

レジストリの編集が必要ですが、サービス情報はにありますHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services。リダイレクトするサービスを見つけ、ImagePathサブキーを見つけて、その値を変更します。


3
最後にこれはレジストリデータにつながりますが、サービスを処理するための特別なWindows API関数が存在することを述べておきます。あなたがない限り(あなたはそれが、FEをexeファイルへのパスを変更したときにWindowsが変化している他に何を確認することはできませんので)直接レジストリの変更は避けるべきで、絶対にあなたは何をすべきか。
lospejos 2016

3
@lospejos「サービスに対処するための特別なWindows API関数が存在することを言及する必要があります」...どちらでしょうか?
Nick M

Services.mscで更新されたサービスパスが表示されない場合は、cmdでmmc.exe "taskkill / F / IM mmc.exe"を
強制終了してみてください

10

PowerShellでも実行できます。

Get-WmiObject win32_service -filter "Name='My Service'" `
    | Invoke-WmiMethod -Name Change `
    -ArgumentList @($null,$null,$null,$null,$null, `
    "C:\Program Files (x86)\My Service\NewName.EXE")

または:

Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\My Service" `
    -Name ImagePath -Value "C:\Program Files (x86)\My Service\NewName.EXE"

3

Run(win + R)を開き、「Regedit.exe」と入力して、「レジストリエディター」を開きます。

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services

Apache2.4」を見つけ、フォルダを開き、右側にある「ImagePath」を見つけ、「value Data」の下の「ImagePath」を開き、次のパスを入力します。

"C:\ xampp \ apache \ bin \ httpd.exe" -k runservice foe XAMPPは他のユーザーがApacheがインストールされている場所をポイントし、内部でbinフォルダーを見つけます "C:(Apacheがインストールされている場所)\ bin \ httpd.exe" -k runservice


0

サービスを実行するためのパスを直接編集することはできません。そのためには、scコマンドを使用できます。

SC CONFIG ServiceName binPath= "Path of your file"

例えば:

sc config MongoDB binPath="I:\Programming\MongoDB\MongoDB\bin\mongod.exe --config I:\Programming\MongoDB\MongoDB\bin\mongod.cfg --service"

0

認証を使用するようにMongoDBサービスを変更しようとしている私のような人のために、この@CodeMakerの回答を少し変更します。

「サービス」の「実行可能ファイルへのパス」を見ると、実行された行にはすでに音声マークが含まれていました。だから私は彼の例に小さな変更を加える必要がありました。

具体的には。

  1. Windowsのタイプサービス
  2. MongoDB(または変更するサービス)を見つけてサービスを開き、必ず停止します。
  3. (表示名ではなく)サービス名を書き留めます
  4. 「実行可能ファイルへのパス」を検索してコピーし、コピーします。

私にとっての道は(スピーチマークに注意)

"C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe" --config "C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg" --service

コマンドラインで

sc config MongoDB binPath= "<Modified string with \" to replace ">"

私の場合、これは

sc config MongoDB binPath= "\"C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe\" --config \"C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg\" --service -- auth"

-2

サービスを削除できます:

sc delete ServiceName

次に、サービスを再作成します。


3
これを行う必要はありません。これを行うには、少なくとも3つのより良い方法があります
Liam

-2

「SC」コマンドで少し深く、すべての「サービス名」を抽出してすべての「QueryServiceConfig」を取得できます:)

>SC QUERY > "%computername%-services.txt" [enter]

>FIND "SERVICE_NAME: " "%computername%-services.txt" /i > "%computername%-services-name.txt" [enter]

>NOTEPAD2 "%computername%-services-name.txt" [enter]

「小さい」NOTEPAD2編集を行います。 「SERVICE_NAME:」、CTRL + Hを選択し、「すべて置換」をクリックします 「CMD」内で「すべて置換」を実行できると想像してください

次に、「CMD」に進みます。

>FOR /F "DELIMS= SKIP=2" %S IN ('TYPE "%computername%-services-name.txt"') DO @SC QC "%S" >> "%computername%-services-list-config.txt" [enter]

>NOTEPAD2 "%computername%-services-list-config.txt" [enter]

それは「私たちのマシン上のサービス」です 生データは「将来のバッチファイル」を供給する準備ができているので、結果は以下のようになります!!!

+ -------------+-------------------------+---------------------------+---------------+--------------------------------------------------+------------------+-----+----------------+--------------+--------------------+
| SERVICE_NAME | TYPE                    | START_TYPE                | ERROR_CONTROL | BINARY_PATH_NAME                                 | LOAD_ORDER_GROUP | TAG | DISPLAY_NAME   | DEPENDENCIES | SERVICE_START_NAME |
+ -------------+-------------------------+---------------------------+---------------+--------------------------------------------------+------------------+-----+----------------+--------------+--------------------+
+ WSearch      | 10  WIN32_OWN_PROCESS   | 2   AUTO_START  (DELAYED) | 1   NORMAL    | C:\Windows\system32\SearchIndexer.exe /Embedding | none             | 0   | Windows Search | RPCSS        | LocalSystem        |
+ wuauserv     | 20  WIN32_SHARE_PROCESS | 2   AUTO_START  (DELAYED) | 1   NORMAL    | C:\Windows\system32\svchost.exe -k netsvcs       | none             | 0   | Windows Update | rpcss        | LocalSystem        |

しかし、HTMLはかなり簡単になります:D

改善のための明るいアイデアは大歓迎ですV ^ _ ^


またはsc、はるかに、はるかに簡単で、めちゃくちゃにしたくないものを使用します。
リアム2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.