제목 : (수정) PE 1회부팅 cmd - PE에서 레지 하이브 기능을 추가하였습니다
왕초보
종료하였습니다
수정 내용입니다
먼저 피드백을 하여 주신 nov님께 감사합니다..항상 도움만 받고 있습니다
복 많이 받으십시요
탐색기에서 PEBootCmd.exe를 실행시 레지 등록 삭제 메세지를 보여줍니다.
사용자 계정 컨트롤 창이 나오는 경우에는 이 메세지가 탐색기 창 앞에 나옵니다 그런데 사용자 계정 컨트롤 창이 나오지 않은
윈도우에서는 메세지창이 탐색기 뒤로 나오는 문제가 있습니다 이 문제를 해결을 하였습니다
다양한 윈도우에서 테스트를 했어야 했는데..제가 부족하였습니다.
재발송을 하도록 하겠습니다...새로 다운을 받으시는 불편을 드려서 죄송합니다
1. 사용자 계정 컨트롤 창이 나오는 경우입니다
2. 사용자 계정 컨트롤 창이 나오는 경우에는 아래처럼 메세지가 바로 보입니다
3. 사용자 계정 컨트롤 창이 나오지 않은 윈도우입니다...PEBootCmd.exe를 실행하였지만 메세지 창이 탐색기 뒤로 나옵니다
4. 작업표시줄에서 클릭을 해야 메세지 창이 보입니다..너무 불편합니다..이것을 확인을 하지 못하였습니다
nov님 피드백 감사합니다
5. 보완을 하셨습니다. 사용자 계정 컨트롤 창이 나오지 않은 경우에도 아래처럼 메세지가 맨 위로 보입니다
-----------------------------------------------------------------------------------------
PE 1회부팅 cmd 관련한 자유게시판의 bangul님의 글을 읽고 참참한 마음에 부족하지만 작은 도움일도 되었으면 하면서 사용기를
쓰게되고..사용기를 보고 응원해주시는분도 있으시고 적용을 해보시는 분도 있으셔서 괜히 기분이 업이 되어서 사용기를 계속 쓰게
되었습니다
솔직히 말씀드려서 오히려 제가 더 많이 배우고 얻었습니다
기존에 오토잇으로 만든 프로그램도 suk님의 새로운 방식을 적용하면서 완전히 다른 프로램이 되었고 nov님 덕분에 외국 PE에서도
에러없이 잘될수가 있었습니다...지니제스트님의 댓글 덕분에 path로 생략할수 있어서 소스도 줄고 부팅 에러 확률도 줄일수 있었
습지다
DengJang께서 사용기의 내용을 보시고 적용을 해주시는 모습에 사용기를 이어서 계속 쓸수가 있었습니다
응원을 해주시는 GreenTea님,bangul님과 추천과 댓글을 남기신분들이 계셔서 여기까지 올수가 있었습니다
관심과 도움을 주신 모든 분들께 감사드립니다
BCD 관련해서 많은 것을 배울수 있었던 시간이었습니다
PE 1회부팅 cmd 관련해서 즐거운 마음으로 하다보니까 여기까지 오게 되었습니다
사용기를 계속 쓰게 되면서 오토잇으로 만든 PEBoot와 이왕이면 기능을 비슷하게 하고 싶었습니다 아쉽게도 cmd에서 PE인지
아닌지 구분하는것을 저는 하는 방법을 찾지를 못하였습니다... wim으로 백업하는 프로그램들과 wim 정보를 추출하는 프로그램
들이 있었지만..PE인지 구분하지를 못하는것 같습니다..
BCD에 대해서 몰랐던것들이 많았던것처럼 아마 어디에 프로그램이 있는데 찾지를 못하는것 같습니다
오토잇으로 만든 프로그램에서 cmd로 넘길때 PE 부분을 검사를 하고 나서 넘길수는 있습니다.. 이것은 좀 아닌것 같아서 결국 cmd
프로그램에서는 PE 구분하는 기능은 아쉽게 포기를 하였습니다..나중에 가능한 프로그램을 찾으면 소개를 하도록 하겠습니다
PE에서 PE로 부팅시에 윈도우를 찾아서 레지 하이브후 윈도우 부팅시에 BCD 흔적을 지울수 있는 명령어를 추가를 하는것은 취향
에 따라서 호불호가 있을것 같습니다
저처럼 복구시스템용 PE를 1회 부팅하려는 목적이면 윈도우에서 PE 부팅을 주로 하기 때문에 필요가 없을것 같습니다
윈도우에서 PE로 부팅하지 않고 BCD에서 바로 PE로 부팅하는 경우에 필요한 기능인데 이런 경우가 얼마나 있을지..PE 테스트를
하시는 분은 이 기능이 필요하실수도 있을것 같습니다
PE에서 윈도우 레지를 하이브해서 하는 것은 안하는것보다는 시간이 걸립니다..큰 차이는 없을수도 있습니다
cmd의 경우 GUI 버전과 달라서 cmd를 바로 수정을 할수가 있어서 좋죠..필요가 없으신분들을 기능만 삭제를 하시면 될것 같습니다
cmd에서 윈도우 파티션을 찾아서 레지를 하이브 하는 부분입니다
:: PE에서 윈도우 파티션 찾기
:_WinDrvFind
Copy /y %Windir%\System32\bcdedit.exe %temp%\bcdedit.exe
Set DefaultVal=
Set WinDrvChk=
for /f "tokens=1*" %%a in ('%temp%\bcdedit /enum all') do (
if "!WinDrvChk!" EQU "Y" if %%a==device Set WinDrv=%%b& set WinDrv=!WinDrv:~-2!& Set WinDrvChk=E
if "!DefaultVal!" EQU "" if %%a==default Set DefaultVal=%%b
if "!DefaultVal!" NEQ "" if %%a==identifier if %%b==!DefaultVal! Set WinDrvChk=Y
)
Set RegFile=%WinDrv%\Windows\System32\config\SOFTWARE
IF EXIST %RegFile% (
Reg.exe load HKLM\sw %RegFile%
for /f "skip=1 tokens=3" %%a in ('reg query "HKLM\sw\Microsoft\Windows\CurrentVersion\RunOnce" /v "PEBootDel" 2^>nul') do set Value=%%a
if "!Value!" EQU "" (
Copy /y PEBootCmd.* %WinDrv%\Windows\
Reg.exe add "HKLM\sw\Microsoft\Windows\CurrentVersion\RunOnce" /v "PEBootDel" /t REG_SZ /d "C:\Windows\PEBootCmd.exe /Del" /f
)
Reg.exe unload HKLM\sw
)
exit /b
- identifier 항목이 필요해서 외국 PE에서도 작동하도록 nov님 방식을 활용을 하였습니다
- PE에서 BCD가 원래 사용된 윈도우 파티션(윈도우가 여러개 있는 경우 처음 BCD가 적용된 윈도우 입니다)을 찾기 위해서 BCD
에서 윈도우 파티션을 찾았습니다
- 윈도우에서 PE로 부팅한 경우에는 이미 레지에 등록이 되어 있어서 레지값이 없는 경우에만 PE에서 레지 등록과 파일 복사를
하도록 하였습니다
소스를 보시면 저는 닉네임처럼 cmd에는 왕초보여서 기본적인 명령어가 아래로 쭉 나열되는 식입니다..
소스가 고습스럽거나 정돈이 되지 못한 부분들이 있을것입니다..양해를 하여 주십시요
if /i "%1" equ "/Del" goto _FileDel
:: 윈도우 부팅시에 BCD 흔적 삭제
:_FileDel
If /i "%~dp0" EQU "C:\Windows\" del /f /q PEBootCmd.*
exit
이 부분은 PE에서 PE로 부팅시 Windows 폴더에 복사한 exe와 cmd를 삭제하기 위해서 goto _FileDel 이 부분이 추가되었습니다
If /i "%SystemDrive%" EQU "C:" (
Reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /v "PEBootDel" /t REG_SZ /d "%~dp0PEBootCmd.exe /Del" /f
) Else (
Call :_WinDrvFind
)
bcdedit /bootsequence %Guid%
PEBootCmd.exe /ReStart
exit
윈도우와 PE에서 레지에 등록하는 방식이 달라서 구분을 해서 등록을 하고 있습니다
PE 1회부팅 cmd 관련 사용기들에서 관련 소스가 있지만 복사해서 활용을 하실수 있으신분도 있으시지만 그렇지 못한 분들도
있으실것입니다
사용기는 확인차원에서 캡처를 한것입니다
1. 현재 BCD에 윈도우가 2개 등록이 되어 있습니다..BCD는 Win10이 설치될때 사용된 BCD입니다.
2. txt 파일은 윈도우와 PE에서 bcdedit /enum all로 추출한것입니다..여기에서 윈도우 파티션 드라이브 문자를 추출하고 있습니다
먼저 첫번째 default 항목에서 오른쪽 값을 추출합니다. 이 값이 윈도우와 PE에서 달라서 추출을 먼저 합니다
3. default 항목에서 추출한 값을 가지고 identifier항목일때 일치하는 줄을 찾습니다.. 다행이 이 경우가 1개만 있습니다
이 줄 다음에 있는 줄에서 드라이브 문자를 추출을 하면 BCD가 처음 사용된 윈도우 파티션입니다 PE에서 PE로 부팅시에 레지
하이브 하는 윈도우 파티션은 이 파티션입니다..
4. cmd를 실행시켜 주는 메세지 프로그램과 boot.sdi가 cmd 파일과 같이 있어야 합니다
cmd 파일이 있는 폴더 경로나 PE 이름은 빈공백이나 한글이 없이 하여 주십시요
5. cmd 내용입니다
1번 suk님께서 알려주신 방식을 적용하였습니다. 이 방식 덕분에 PE 1회 부팅 프로그램이 완전히 달라졌습니다
suk님 진심으로 감사드립니다
2번 PE에서 PE로 부팅시 C:\Windows 폴더에 파일이 복사되는 경우 이 파일들을 삭제하기 위해서 추가되었습니다
3번 원래는 PE 부팅확인 메세지만 있었습니다.. 이 작은 메세지는 중국 PE에서 확인 메세지 없이 진행을 했더니 달레이가 2~3초
걸려서 cmd가 숨김으로 작동되어서 실행이 되었나 하는 생각이 들어서 기능을 추가를 한것입니다
중국 PE처럼 딜레이가 없다면...필요가 없는 기능일수도 있습니다..주석 처리 하시면 됩니다
4번 winload.xxx 를 등록한 Path 부분은 없어도 되어서 등록하지 않습니다
6. 1번은 레지에 등록하는것이 윈도우와 PE에서 달라서 추가된 부분입니다
2번은 PE에서 PE로 부팅시에 복사된 파일을 윈도우로 부팅시에 삭제하는 부분입니다
7. PE에서 PE로 부팅시에 윈도우 파티션을 찾아서 레지 하이브후에 파일들을 복사하는 부분입니다
이 부분이 필요가 없으신분은 과감히 정리를 하시면 됩니다. 아래 진한 부분도 정리를 하고 처음에 삭제하는 부분도 정리를
해야죠..
If /i "%SystemDrive%" EQU "C:" (
Reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /v "PEBootDel" /t REG_SZ /d "%~dp0PEBootCmd.exe /Del" /f
) Else (
Call :_WinDrvFind
)
bcdedit /bootsequence %Guid%
PEBootCmd.exe /ReStart
exit
8. 맨 아래에 메세지에 관한 설명이 있습니다
9. PEBootCmd.exe를 실행하시면 PEBootCmd.cmd가 숨김으로 실행이 됩니다..그냥 실행시에는 우클릭 메뉴 등록 삭제를 합니다
10. 우클릭 메뉴 등록 메세지입니다..메세지 내용과 컬러바 설정은 cmd에서 할수가 있습니다,..원하시는 스타일로 설정을 하시면
됩니다..cmd는 이렇게 수정이 쉬운것이 최대 장점 같습니다
11. PE 부팅확인 메세지를 사용을 하시려면 아래처럼 하시면 됩니다
12. 우클릭 메뉴에서 실행을 하시거나...바로가기나 exe 파일에 끌어 당기셔도 실행이 됩니다
13. 확인 메세지입니다
14. 확인 메세지가 싫으시다면 cmd에서 :: 로 주석처리를 해주시면 됩니다
간단한 메세지도 싫으시면 주석처리를 하시면 됩니다.. 간단한 메세지는 재부팅에 딜레이가 있는 중국 PE 때문에 추가한것이어
서 윈도우에서는 실행되지 않고 PE에서만 실행되도록 되어 있습니다..윈도우는 재부팅이 빨라서 필요가 없습니다
15. 복구시스템용으로 사용하는 PE는 아래처럼 PE 부팅시에 우클릭 메뉴가 등록이 되도록 하는것이 좋습니다
PE로 1회 부팅을 해서 윈도우를 복원을 하면 윈도우 레지에 등록한 BCD 흔적 삭제 레지는 아무런 의미가 없어서 입니다
16. PE로 부팅을 하였습니다 우클릭에 메뉴가 등록이 되었습니다
17. 우클릭 메뉴에 등록될때 BCD에 흔적이 삭제가 되었습니다..윈도우 복원을 해도 흔적이 없게 됩니다
18. 윈도우 레지에 등록된 내용입니다..
19. 이번에는 끌어 댕기기로 하여 보았습니다.
20. 중국 PE로 부팅을 하였습니다...BCD 흔적이 남아 있습니다
21. 다시 다른 PE로 부팅을 진행하였습니다
22. 윈도우에서 이미 레지를 등록을 한경우에는 PE에서 PE로 부팅을 해도 레지를 바꾸지 않습니다
23. 윈도우로 부팅을 하였습니다..BCD 흔적이 모두 삭제가 되었습니다 PEBootCmd.exe가 cmd를 숨김실행을 해주어서 윈도우
부팅시에 실행되는 흔적이 없습니다
24. 이렇게 BCD에 등록된 PE로 바로 부팅을 하면 윈도우 레지에 등록을 할수가 없습니다
25. 다른 PE로 부팅을 하여 보겠습니다
26. BCD에 흔적이 없네요..우클릭에 등록을 하게되어 있었습니다..
27. 윈도우 파티션에는 레지 하이브후 C:\Windows 폴더에 복사한 파일 경로가 등록이 되어 있습니다
28. 아래에도 파일이 2개 복사되었습니다
29. 다시 다른 PE로 부팅을 해서 BCD에 흔적은 남겼습니다
30. 윈도우로 부팅을 하였습니다 BCD 흔적이 삭제가 되었습니다
31. Windows 폴더에 복사한 파일들도 삭제가 되었습니다
32. 기적이 일어났습니다.. 메세지 프로그램에 작은 메세지를 추가를 하였는데 검출이 4개로 줄었습니다..이런경우도 있네요
검출이 되는 부분을 감안을 하고 요청을 하여 주십시요
33. 마무리
PE 1회부팅 cmd 관련해서 관심을 가져주신분들 덕분에 부족한 cmd가 새로 탄생할수 있었습니다
저 또한 많을것을 배울수 있었습니다
초보인 제가 아둥바둥 열심히 해도 한발 나아가기가 힘듭니다
고수님의 관심으로 몇백 km를 한순간에 나아간 기분입니다. 윈포에는 역시 고수님들이 많으시구나 하는것을 깨달았습니다
고수님들의 관심으로 진도를 나아 갈수 있었다면.. 응원해 주신분들 덕분에 사용기를 쓰는 재미가 있었습니다
고수님의 지식은 큰 도움이었고 응원해주신 분들은 저에게는 큰힘이었습니다.
도움을 주신 분들께 정중히 감사인사를 올립니다
복 많이많이 받으십시요
불금입니다...즐거운 시간이 되시길 바랍니다
댓글 [70]
왕초보
- 2023.07.28
- 19:37:21
윈도우 파티션 찾고 레지하이브 하는곳에서 시간이 좀 걸립니다...
윈도우에서 PE를 자주 테스트 하시는 분은 이 기능을 빼도 BCD에 흔적이 하나 밖에 남지 않아 다음 PE 테스트에서
삭제가 되기 때문에..속도를 좋아하신다면 이 기능없이 하셔도 불편하시지는 않으실것 같습니다
수고 많으셨습니다. 감사합니다.