소프트웨어 devcon.exe, pnputil.exe 드라이버 설치
2022.12.08 17:35
안녕하세요. 제가 가상키보드 드라이버를 배포할 일이 있어 드라이버 파일들과 함께 배치파일을 구성하여 원클릭으로 설치하게 만들려고 하는데요.
해당 문구를 발생시키지 않고 드라이버를 설치할 수 있는 방법이 있을까요? 사용될 스크립트는 아래와 같습니다
devcon.exe install abcdefg.inf root\abcdefg
알아본 바로는 -runhidden 을
devcon.exe install abcdefg.inf root\abcdefg -runhidden
이런식으로 붙이면 된다고 보긴 했는데 붙이나 안붙이나 동일하여 여쭤봅니다!
댓글 [11]
-
zerojiddu 2022.12.08 18:33 -
M1nar1 2022.12.09 00:17
많은 도움이 되었습니다. 혹시 어떤 방법으로 드라이버를 삭제할 수 있는지요?
pnputil /remove-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
pnputil /remove-device /deviceid "USB\Class_03"
pnputil로 두 방법 다 .inf또는 경로를 긁어와야 하는거 같은데 스크립트에서 구현하기가 힘드네요
pnputil로 "driver.inf" 사용해 간편하게 삭제하는 방법이 없을까요? -
zerojiddu 2022.12.09 10:31 현재 작동중인 윈도우에서 마소꺼 제외한
다른 회사 드라이버의 원래 .inf 파일 이름 말고
oem#.inf (Published Name) 이름을 확인해서,
dism /online /get-drivers /format:table
이렇게 치니 정상적으로 제거가 되네요.
pnputil /delete-driver oem18.inf /force
-
M1nar1 2022.12.09 11:35
oem번호.inf 이 부분이 PC마다 번호가 달라서 삭제에 어려움을 겪고 있습니다.. original file name으로 처음부터 삭제가 가능하다면 오히려 쉬울텐데,, oem.inf말고는 방법이 없는건가요..? -
M1nar1 2022.12.09 11:45
+ 삭제에 어려움을 왜 겪는지 글을 안써서 덧붙입니다!
스크립트로 구현을 해야해서 오리지널 파일 이름으로 차라리 삭제하면 편한데 oem#.inf는 PC마다 #의 넘버가 달라 다른 방법이 없는건가 해서 여쭤본겁니다..! -
zerojiddu 2022.12.09 12:58 oem#.inf 이름말고 다른방식으로,
이 한줄로 얼굴인식 드라이버 삭제해보니 정상적으로 돼네요.
foreach ($dev in (Get-PnpDevice | Where-Object{$_.Service -eq "WUDFRd"})) {pnputil /remove-device $dev.InstanceId}
님의 경우는
파워쉘에서
get-pnpDevice 로 전체 드라이버 정보를 보고
get-pnpDevice | ?{$_.Class -eq 'keyboard'} | select *
치면 원하는 드라이버 속성이 뜨요.
Service 부분 이름이 .inf 파일 이름과 일치할거예요.
FriendlyName, Name 부분으로 해도 됩니다.
foreach ($dev in (Get-PnpDevice | Where-Object{$_.Service -eq "i8042prt"})) {pnputil /remove-device $dev.InstanceId}
그리고 위 제 댓글에서
pnputil /delete-driver oem18.inf /force
만 적었는데,
pnputil /delete-driver oem18.inf /uninstall /force /reboot
이 제거에 맞는거 같습니다.
-
M1nar1 2022.12.09 17:37
정보 알려주셔서 감사합니다..
금방 테스트 해본 바로는
PS C:\Windows\system32> foreach ($dev in (Get-PnpDevice | Where-Object{$_.Service -eq "mshidumdf"})) {pnputil /remove-device $dev.InstanceId}Microsoft PnP 유틸리티
장치를 제거하지 못했습니다: ROOT\HIDCLASS\0000
해당 장치의 사용을 중지할 수 없습니다.
Microsoft PnP 유틸리티
장치를 제거하지 못했습니다: ROOT\HIDCLASS\0001
해당 장치의 사용을 중지할 수 없습니다.
라고 파워쉘에서 출력을 하는데 강제적인 방법이 없을까요..?
++ devcon으로는
call devcon.exe remove "HID\ttcvcontrkb"call devcon.exe remove "root\ttcvcontrkb"
이 명령어 두개로 가능하더군요 -
zerojiddu 2022.12.09 18:37 방금 이명령어로 제 컴에선 삭제되는 걸 확인했습니다.
레지키도 삭제되고, 확인되던 정보가 전혀 나오지 않는걸 보니 정상 제거됐어요.
Invoke-CimMethod -Query 'select * from Win32_SystemDriver where name like "mshidumdf"' -MethodName "delete"
삭제전 제 컴에선,
Get-PnpDevice | Where-Object{$_.Service -eq "mshidumdf" 이걸로는 아무것도 뜨지가 않고,
Get-CimInstance Win32_SystemDriver -Filter "name='mshidumdf'" 이걸로 하니 정보가 뜨네요.
get-service mshidumdf 치니, 시작유형이 수동모드로 자체적으로는 시작을 못하는 윈도우 서비스로 나와요.
레지키도 있구요.
get-service mshidumdf | set-service -startupType disabled 이걸치면 아예 시작못하게 설정도 되구요.
-
M1nar1 2022.12.12 23:58
제가 이 스크립트를 사용하여 오늘 테스트를 해봤습니다. 근데 이런 오류가 발생하더군요
아무리 구글링을 해봐도 관련된 내용이 찾기 힘들어 다시 문의드립니다 ㅠㅠ -
zerojiddu 2022.12.13 07:32 Get-AuthenticodeSignature 는 .cat(드라이버 보안 인증서가 있는 catalog 파일)
을 지정해야되는데,
ttcvcontrkb.inf 드라이버 설치파일로 잘못 지정했네요.
제컴에서 한줄 한줄 쳐봤어요. 아무 에러없고, 아무 확인창 없이
드라이버가 조용히 순식간에 설치됐어요.
-
M1nar1 2022.12.13 14:03
감사합니다! 드라이버 설치되고 devcon으로 장치설치까지 해주니 장치관리자에 문제없이 HID장치로 뜨네요
근데 파워쉘에선 잘 되는데 cmd에서 powershell 붙여주고 실행하니 이와같은 문제가 발생하네요..
제가 파워쉘 스크립트가 아닌 배치파일 스크립트로 작성중이라 오류 잡기가 힘드네요 ㅠㅠ
명령어 옵션문제가 아니라,
드라이버 설치파일 인증서를 윈도우의
LocalMachine\TrustedPublisher certificate store
에 등록하는 스크립트를 미리 넣어두고 설치하면 될거 같은데요.
위 스샷도 인증서 등록화면이구요.
파워쉘에서,
$signature = Get-AuthenticodeSignature driver.cat
$store = Get-Item -Path Cert:\LocalMachine\TrustedPublisher
$store.Open("ReadWrite")
$store.Add($signature.SignerCertificate)
$store.Close()
PnPutil.exe /add-driver driver.inf /install