programing

윈도우즈 서비스의 "실행 파일 경로" 수정

linuxpc 2023. 6. 10. 08:29
반응형

윈도우즈 서비스의 "실행 파일 경로" 수정

응용 프로그램 경로를 수정하고 싶지만, 서비스가 여전히 이전 위치를 가리키기 때문에 경로가 끊어집니다.

가는 것으로Administrative Tools > Services속성 대화상자를 열고 다음을 볼 수 있습니다.Path to executable바꿀 방법이 없어요

사용자가 애플리케이션을 다시 설치하지 않고 서비스 경로를 수정할 수 있는 방법이 있습니까?

또한 SuperUser에서 볼 수 있는 이 접근 방식은 다음과 같습니다.sc레지스트리를 수정하는 대신 명령줄:

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

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

sc qc <service name>

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

[SC] 쿼리 서비스 구성 SUCCESS

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

레지스트리 편집을 포함하지만 서비스 정보는 다음에서 확인할 수 있습니다.HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services리디렉션할 서비스를 찾은 다음ImagePath하위 키를 누르고 해당 값을 변경합니다.

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"

Run(win+R)을 열고 "Regedit.exe"를 입력한 다음 "Registry Editor"를 열려면 다음으로 이동합니다.

HKEY_LOCAL_MACHINE\시스템\현재 제어 세트\서비스

"Apache2"를 찾습니다.4" 폴더를 열고 오른쪽에 있는 "ImagePath"를 찾은 다음 "valueData" 아래에 있는 "ImagePath"를 엽니다. 다음 경로를 입력합니다.

"C:\xampp\apache\bin\httpd.exe" -k 다른 사용자용 XAMPP 서비스 실행은 Apache가 설치된 위치를 가리키고 내부에서 "C:(Apache 설치 위치)\bin\httpd.exe" -k runservice

이 @CodeMaker의 답변에 약간의 수정을 가했습니다. 저처럼 MongoDB 서비스를 수정하려는 사람은 누구나 인증을 사용할 수 있습니다.

"서비스"에서 "실행 파일 경로"를 살펴보니 실행된 행에는 이미 음성 표시가 포함되어 있었습니다.그래서 저는 그의 예를 약간 수정해야만 했습니다.

구체적으로 말씀드리자면.

  1. 윈도우즈에서 서비스 입력
  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"

서비스를 실행할 경로를 직접 편집할 수 없습니다.이를 위해 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"

따옴표로 느낌이 들었습니다. 지 사 Git Bash 용 해 로 를 나 하 의 따 로 표 야 어 는 고 했 습 다 니 각 다 생 한 묶 옴 나 경 단 위 를 자 ▁i 나습 ▁in ▁you ▁like는▁quotes했니▁path다▁put▁the▁should각▁single▁just▁felt▁for생▁adding▁g고다한it야어묶로▁users' '에 있어서와 같이

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

예를 들어sc config MongoDB binPath='"C:\Program Files\MongoDB\Server\5.03\bin\mongod.exe" --config "C:\Program Files\MongoDB\Server\5.03\bin\mongod.cfg" --service --auth'

이것은 Windows 10에서 Git Bash로 서비스 경로를 업데이트하는 데 도움이 되었습니다.

프로세스 해커가 설치된 경우 이를 사용할 수 있습니다.

여기에 이미지 설명 입력

사용하는 대안.Invoke-WmiMethod최신 CIM cmdlet을 사용합니다.이는 또한 필요성을 방지합니다.@($null,$null...)이전 답변에서 볼 수 있듯이 개체입니다.

Get-CimInstance win32_service -Filter "Name='My Service'" | Invoke-CimMethod -MethodName Change -Arguments @{PathName="C:\Program Files\My Service\NewName.exe"}

'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]

'작은' 메모장2 편집을 수행합니다.'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]

바로 '우리 기계의 서비스'입니다. Raw data(로우 데이터)는 'future batch file(미래 배치 파일)'을 제공할 준비가 되었으므로 결과는 아래와 같습니다!!!

+ -------------+-------------------------+---------------------------+---------------+--------------------------------------------------+------------------+-----+----------------+--------------+--------------------+
| 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 delete ServiceName

그런 다음 서비스를 다시 만듭니다.

언급URL : https://stackoverflow.com/questions/7190480/modifying-the-path-to-executable-of-a-windows-service

반응형