回答:
このsc config
コマンドを使用して、サービスが指すパスを変更できます。
SC CONFIG YourServiceName binPath= "C:\SomeDirectory\YourFile.EXE"
これにより、呼び出されるサービスが更新されYourServiceName
、「実行可能ファイルへのパス」エントリがに変更されC:\SomeDirectory\YourFile.EXE
ます。その後、サービスを再起動します。これは次の方法で実行できます。
NET STOP YourServiceName & NET START YourServiceName
Path to executable
に引用符やその他のパラメーターが含まれている場合はどうですか?例:"C:\Program Files\CollabNet\Subversion Server\svnserve.exe" --service -r "E:\Repositories" --listen-port "3690"
悲しいことに、私はこのためにregeditルートに行かなければなりませんでした。
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"
上記の回答はうまくいきますが、返信することはできませんが、パスに引用符や他の引数が必要な場合、イメージパスなどのレジストリの引用されていないパスの脆弱性を修正するには管理者としてCMDから次のことができます:
(例:C:\ Program Files(x86)\ YourService \ YourProcess.exe)
SC CONFIG YourService binPath= "\"C:\Program Files (x86)\YourService\YourProcess.exe\"
管理者としてpowershellから次のことができます:
SC.exe CONFIG YourService binPath= --% "\"C:\Program Files (x86)\YourService\YourProcess.exe\"
これらにより、次の結果が得られます。
"C:\Program Files (x86)\YourService\YourProcess.exe"
...血なまぐさい引数とエスケープパラメータは悪夢です!これが将来誰かを助けることを願っています。
サービスを実行するパスを直接編集することはできません。そのためには、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"