Windows 서비스의 "실행 파일 경로"수정


253

내 응용 프로그램의 경로를 수정하고 싶지만 서비스가 여전히 이전 위치를 가리 키기 때문에 경로가 손상됩니다.

로 이동 Administrative Tools > Services하면 속성 대화 상자를 열고를 볼 수 Path to executable있지만 변경할 수는 없습니다.

사용자가 응용 프로그램을 다시 설치하지 않고도 서비스 경로를 수정할 수있는 방법이 있습니까?

답변:


245

또한이 슈퍼 유저에 볼이 방법 용도 sc레지스트리를 수정하는 명령 줄을 대신은 :

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

참고 : 뒤에 공백 binPath=이 중요합니다. 다음을 사용하여 현재 구성을 쿼리 할 수도 있습니다.

sc qc <service name>

다음과 유사한 출력이 표시됩니다.

[SC] QueryServiceConfig 성공

SERVICE_NAME : 서비스 이름

    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"
Marc Durdin

2
또한 직접 레지스트리 수정 방법보다 배포 스크립트에서 조금 더 좋습니다.
Niall Connaughton

단. Reg. ** 참고 : 변경 사항을 보려면 services.msc를 닫고 열어야합니다.
yonsk December

1
당신은을 얻는 경우에 [SC] QueryServiceConfig FAILED 122:sc qc X사용이 sc qc X 1000
라파엘

13
PowerShell을에서 이것을 사용하는 경우, 사용 확인 sc.exe, 벌거 벗은하지sc
피아트

292

레지스트리 편집이 포함되지만 서비스 정보는에서 찾을 수 있습니다 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. 리디렉션하려는 서비스를 찾고 ImagePath하위 키를 찾은 다음 해당 값을 변경하십시오.


3
결국 이것은 레지스트리 데이터로 이어지지 만 서비스를 처리하기위한 특별한 Windows API 기능이 있음을 언급해야합니다. 당신이하지 않으면 (당신이 확실이 EXE 경로, 철 수정할 때 다른 윈도우가 변화하고 무엇을 할 수 없기 때문에) 직접 레지스트리 수정은 피해야한다 절대적으로 당신이 무엇을.
lospejos

3
@lospejos "서비스를 다루는 특별한 Windows API 기능이 있다는 것을 언급해야합니다."
Nick M

누군가가 Services.msc를 업데이트 서비스 경로가 표시되지 않는 경우 "에서 taskkill / F / IM mmc.exe를"cmd를 mmc.exe를 살해하려고
Drag0nKn1ght

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 \ 서비스

" 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훨씬 쉽고 훨씬 쉽게 망치는 것을 사용하십시오 .
Liam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.