반응형

WinSetup64 v4.0 Command Line 옵션

WinSetup64 v4.0에서는 프로그램을 직접 실행하여 GUI에서 작업하는 기존 방식과 함께 Command Line 옵션을 이용한 설치 작업 연동 기능을 추가하였습니다. Command Line을 이용하면 외부 프로그램이나 자동화 스크립트에서 WinSetup64을 호출하여 이미지 파일, 이미지 Index, 설치 드라이브, 부팅 파티션 등을 지정할 수 있습니다. 또한 /Disk와 /Preset을 함께 사용하면 파티션 작업까지 자동으로 수행한 후 Windows 이미지 설치 단계로 연결할 수 있습니다.


1. /ImageFile

/ImageFile:<경로>

설치에 사용할 이미지 파일을 지정합니다.

소스에서는 다음 이미지 형식을 지원하도록 구성되어 있습니다.

ISO
WIM
ESD
SWM

 

예를 들어 ISO 파일을 지정하면 다음과 같이 사용할 수 있습니다.

WinSetup64.exe /ImageFile:"H:\install.iso"

 

WIM 파일을 직접 지정하는 경우에는 다음과 같이 사용할 수 있습니다.

WinSetup64.exe /ImageFile:"H:\sources\install.wim"

 

/ImageFile은 Command Line 설치 연동에서 중심이 되는 옵션으로, 실제 설치 작업을 수행하려면 일반적으로 /Index, /ApplyDrv 등의 옵션과 함께 사용하게 됩니다.

 


2. /Index

/Index:<번호>

WIM 또는 ESD 이미지에서 설치할 Windows 에디션의 Index 번호를 지정합니다.

 

예를 들어 2번 Index를 설치하려면 다음과 같이 지정합니다.

/Index:2

 

실제 소스에서는 지정된 Index를 프로그램의 이미지 목록에서 찾아 선택하도록 처리되어 있습니다.

 

따라서 /ImageFile로 이미지 파일을 지정하고 /Index로 설치할 이미지를 선택하는 구조입니다.

예:

WinSetup64.exe /ImageFile:"install.wim" /Index:2

3. /Disk

/Disk:<디스크번호>

 

파티션 작업을 수행할 물리 디스크 번호를 지정합니다.

 

예:

/Disk:6

 

v4.0에서는 /Disk가 단순히 설치 대상 디스크를 지정하는 용도가 아니라 파티션 작업 자동화와 연결됩니다.

 

특히 /Disk와 /Preset을 함께 사용하면 지정한 디스크에 저장된 프리셋 설정을 기반으로 파티션 작업을 먼저 수행합니다.

 

소스의 실제 처리 순서도 다음과 같이 구성되어 있습니다.

/Disk + /Preset
        ↓
파티션 작업
        ↓
디스크/파티션 정보 갱신
        ↓
Windows 이미지 설치

 

즉, Command Line 하나로 파티션 구성 후 Windows 설치까지 연결할 수 있는 부분입니다.

 


4. /Preset

/Preset:<1~6>

 

저장된 파티션 프리셋을 지정합니다.

 

WinSetup64에서는 WinSetup.ini의 다음과 같은 구조를 사용합니다.

[Preset_1]
[Preset_2]
[Preset_3]
...
[Preset_6]

 

예:

/Preset:1

 

소스에서는 /Preset 값을 1~6 범위로 처리하며, 값을 생략하거나 유효하지 않은 값이 들어오는 경우 기본적으로 Preset_1을 사용하도록 구성되어 있습니다.

따라서 다음과 같이 사용할 수 있습니다.

WinSetup64.exe /Disk:6 /Preset:1

 

이 명령은 6번 디스크에 Preset_1의 파티션 구성을 적용하는 방식입니다.

 

[Preset_1]
PartType=GPT
WinSize=Auto
WinLabel=Windows
WinLetter=W
SysSize=200
SysLabel=System
SysLetter=S
MSRCheck=4
MSRSize=16
DataCheck=4
DataSize=
DataLabel=Data
WinRECheck=4
WinRESize=2
WinRELabel=Recovery
WinRELetter=R

 

디스크 프리셋1  파티션 구성 연동 - 움짤(GIF)


5. /ApplyDrv

/ApplyDrv:<드라이브>

 

Windows 이미지를 실제로 적용할 대상 드라이브를 지정합니다.

 

예:

/ApplyDrv:W

 

또는

/ApplyDrv:W:

 

소스에서는 입력값을 처리하면서 드라이브 문자 형식을 정리하므로 W와 W: 형태를 모두 사용할 수 있도록 구성되어 있습니다.

 

예:

WinSetup64.exe /ImageFile:"install.wim" /Index:1 /ApplyDrv:W

 

이 경우 선택한 이미지가 W: 드라이브에 적용됩니다.


6. /BootDrv

/BootDrv:<문자 | - | *>

 

Windows 설치 후 부팅 파일을 구성할 부팅 파티션을 지정합니다.

이 옵션은 세 가지 방식으로 사용할 수 있습니다.

일반적인 드라이브 문자

/BootDrv:S:

 

지정한 S: 드라이브를 부팅 파티션으로 사용합니다.

- 자동 검색

/BootDrv:-

 

설치 대상과 동일한 디스크에서 ESP 또는 Active 부팅 파티션을 자동으로 검색합니다.

특히 /ApplyDrv와 함께 사용하면 설치 대상 드라이브가 속한 디스크를 기준으로 부팅 파티션을 찾아 연결합니다.

 

따라서 자동 설치 환경에서는 다음과 같이 구성할 수 있습니다.

/ApplyDrv:W /BootDrv:-

* 현재 부팅 드라이브

/BootDrv:*

 

현재 시스템의 부팅 드라이브를 찾아 해당 파티션을 사용합니다.

 

즉 /BootDrv는 다음 세 가지 방식을 제공합니다.

/BootDrv:S:    지정된 부팅 파티션
/BootDrv:-     설치 디스크에서 자동 검색
/BootDrv:*     현재 시스템 부팅 드라이브

7. /OemPath

/OemPath:<경로>

 

Windows 설치 과정에 사용할 $OEM$ 폴더의 경로를 지정합니다.

 

예:

/OemPath:"H:\sources\$OEM$"

 

Command Line으로 $OEM$ 경로를 지정하면 GUI의 $OEM$ 관련 설정에 해당 경로가 반영됩니다.

이를 이용하면 Windows 설치 과정에서 추가 파일이나 스크립트 등을 함께 구성하는 자동화 환경을 만들 수 있습니다.


8. /XmlFile

/XmlFile:<경로>

 

무인 설치에 사용할 XML 파일을 지정합니다.

 

예:

/XmlFile:"H:\AutoUnattend.xml"

 

또는

/XmlFile:"H:\unattend.xml"

 

소스에서는 지정된 XML 파일이 실제로 존재하는 경우 해당 기능을 활성화하고 GUI의 XML 입력 항목에도 경로를 반영합니다.

따라서 Command Line에서 이미지와 함께 무인 설치 XML까지 지정할 수 있습니다.


9. /DriversPath

/DriversPath:<경로>

 

설치 과정에서 사용할 드라이버 폴더를 지정합니다.

 

예:

/DriversPath:"H:\DRIVERS"

 

지정한 경로가 존재하면 드라이버 통합 옵션을 활성화하고 해당 경로를 GUI에 반영합니다.

따라서 별도의 GUI 조작 없이 Command Line에서 드라이버 경로까지 지정할 수 있습니다.


10. /after

/after:<Ready | Finish | Shutdown | Reboot | fw | ao>

 

설치 작업 완료 후 수행할 동작을 지정합니다.

지원되는 값은 다음과 같습니다.

옵션동작

Ready 작업 완료 후 대기
Finish 프로그램 종료
Shutdown 시스템 종료
Reboot 시스템 다시 시작
fw BIOS/UEFI 펌웨어 설정 진입
ao Finish와 동일하게 처리

예:

/after:Finish

 

설치 작업이 끝난 후 WinSetup64 프로그램을 종료합니다.

 

또는

/after:Reboot

 

설치 완료 후 시스템을 다시 시작하도록 지정할 수 있습니다.


11. /d

/d

 

기존 Windows 기본 부팅 항목을 보존하는 옵션입니다. 소스에서는 이 옵션이 지정되면 기존 기본 부팅 항목 정보를 보존한 후 bcdboot 작업 이후 이전 기본 항목을 복원하는 방식으로 처리하도록 구성되어 있습니다.

 

예:

WinSetup64.exe /ImageFile:"install.wim" /Index:1 /ApplyDrv:C: /d

12. /Compact

/Compact

 

WIM 이미지 적용 시 wimlib의 Compact 모드를 적용합니다.

소스에서는 실제 wimlib 명령에 다음 옵션을 추가하도록 구현되어 있습니다.

--compact=xpress4k

 

즉,

/Compact

 

을 사용하면 내부적으로 이미지 적용 명령에

--compact=xpress4k

 

가 추가됩니다.

 

따라서 일반 이미지 적용과 Compact 이미지 적용을 Command Line에서 선택할 수 있습니다.


13. /ApplyStart

/ApplyStart

 

설치 시작 전에 표시되는 확인 과정을 생략하고 바로 이미지 설치를 시작하도록 하는 옵션입니다.

 

단독으로 사용하는 옵션이라기보다는 다음과 같이 설치에 필요한 주요 옵션들과 함께 사용하는 형태입니다.

/ApplyStart

 

소스에서는 다음 조건이 모두 충족될 경우 자동 설치를 시작하도록 되어 있습니다.

/ImageFile
/Index
/ApplyDrv
/ApplyStart

 

그리고 /BootDrv가 지정되어 있거나 설치 위치를 기준으로 자동 부팅 파티션을 찾을 수 있어야 실제 설치 과정으로 연결됩니다.


14. /SaveList

/SaveList:<경로>

 

이미지 파일에 포함된 Windows 이미지 목록을 텍스트 파일로 저장합니다.

 

이 옵션은 /ImageFile과 함께 사용하도록 구현되어 있습니다.

 

예:

WinSetup64.exe /ImageFile:"install.wim" /SaveList:"WimList.txt"

 

이 경우 GUI에서 직접 이미지를 선택하지 않고 WIM 이미지의 정보를 확인하여 지정한 텍스트 파일로 저장한 후 종료하는 방식으로 사용할 수 있습니다. 또한 v4.0의 탐색기 컨텍스트 메뉴 기능에서도 이 옵션이 활용됩니다.

 

예를 들어 소스에서는 이미지 파일 우클릭 메뉴의 이미지 목록 기능을 다음과 같이 등록합니다.

WinSetup64.exe /ImageFile:"%1" /SaveList:"WimList.txt"

 

따라서 Windows 탐색기에서 WIM/ESD/SWM/ISO 파일을 대상으로 이미지 정보를 확인하는 용도로도 활용할 수 있습니다.


15. /add

/add

 

Windows 탐색기의 우클릭 컨텍스트 메뉴에 WinSetup64 기능을 등록합니다.

소스에서는 다음 확장자를 대상으로 컨텍스트 메뉴를 등록합니다.

.wim
.esd
.swm
.iso

 

등록 작업을 완료하면 프로그램을 종료합니다.

 

예:

WinSetup64.exe /add

16. /remove

/remove

 

WinSetup64에서 등록한 탐색기 우클릭 컨텍스트 메뉴를 제거합니다.

 

예:

WinSetup64.exe /remove

 

/add와 마찬가지로 작업 후 프로그램을 종료합니다.


Command Line 옵션 조합

v4.0의 Command Line 기능에서 중요한 부분은 각각의 옵션을 독립적으로 사용하는 것뿐만 아니라 여러 옵션을 조합하여 하나의 설치 작업으로 연결할 수 있다는 점입니다.

파티션 작업만 수행

WinSetup64.exe /Disk:6 /Preset:1

 

6번 디스크에 Preset_1의 파티션 구성을 적용합니다.

파티션 구성 후 Windows 자동 설치

WinSetup64.exe /ImageFile:"H:\install.iso" /Index:2 /Disk:6 /Preset:1 /ApplyDrv:W /BootDrv:- /ApplyStart

 

이 명령은 소스의 처리 순서에 따라 다음과 같이 동작합니다.

Disk 6 선택
   ↓
Preset 1 적용
   ↓
파티션 작업
   ↓
디스크 및 파티션 정보 갱신
   ↓
H:\install.iso 이미지 사용
   ↓
Index 2 선택
   ↓
W: 설치 대상 선택
   ↓
부팅 파티션 자동 검색
   ↓
/ApplyStart
   ↓
Windows 이미지 설치 시작

WIM 이미지 설치 + Compact + 종료

WinSetup64.exe /ImageFile:"install.wim" /Index:1 /ApplyDrv:C: /after:Finish /Compact /d

 

이 경우 Index 1 이미지를 C:에 적용하고 Compact 옵션을 사용하며, 작업 완료 후 프로그램을 종료하도록 구성됩니다.

이미지 목록 저장

WinSetup64.exe /ImageFile:"install.wim" /SaveList:"WimList.txt"

 

WIM 이미지의 정보를 텍스트 파일로 저장하는 용도로 사용할 수 있습니다.


Command Line 입력 형식

v4.0의 Command Line 파서는 입력 형식도 비교적 유연하게 구성되어 있습니다.

소스에서는 다음과 같은 형태를 모두 인식합니다.

/Key:Value
Key:Value

 

또한 / 또는 \와 같은 접두사를 제거한 후 옵션을 비교하기 때문에 접두사에 따른 차이를 크게 두지 않도록 구현되어 있습니다.

대소문자 역시 구분하지 않습니다.

 

예를 들어 옵션 이름은 다음과 같이 사용할 수 있습니다.

/ImageFile:"install.wim"
/imagefile:"install.wim"

 

동일한 방식으로 처리됩니다.


v4.0 Command Line 연동의 핵심

WinSetup64 v4.0의 Command Line 기능을 전체적으로 보면 크게 세 단계로 나눌 수 있습니다.

1단계 — 디스크 구성

/Disk
/Preset

↓

2단계 — Windows 설치 환경 설정

/ImageFile
/Index
/ApplyDrv
/BootDrv
/OemPath
/XmlFile
/DriversPath

↓

3단계 — 설치 실행 및 완료 동작

/ApplyStart
/Compact
/d
/after

 

 

 

이러한 구조를 이용하면 WinSetup64을 단순히 GUI에서 사용하는 설치 프로그램이 아니라, 다른 자동화 프로그램에서 Command Line으로 호출하여 Windows 설치 과정을 연동하는 구성으로 사용할 수 있습니다. 특히 /Disk + /Preset + /ImageFile + /ApplyDrv + /BootDrv + /ApplyStart 조합은 v4.0에서 추가된 Command Line 설치 연동의 핵심적인 사용 형태입니다. 또한 /SaveList, /add, /remove와 같은 옵션을 별도로 제공하여 Windows 이미지 정보 확인 및 탐색기 컨텍스트 메뉴 연동까지 Command Line을 통해 처리할 수 있도록 구성하였습니다. 위 내용은 실제 WinSetup64 v4.0(1).au3 소스의 /ImageFile부터 /remove까지의 옵션 정의와 실제 처리 로직을 기준으로 작성한 것입니다. 특히 /Disk + /Preset이 이미지 설치보다 먼저 실행되는 부분과 /BootDrv:-, /ApplyStart, /Compact의 실제 처리 방식까지 소스에 맞춰 반영했습니다.

 

WinSetup64 Command Line 명령 연동 - 움짤(GIF)

 

반응형
반응형

WinSetup64 v4.0 업데이트

WinSetup64을 v4.0으로 업데이트하면서 기존의 GUI 방식 작업뿐만 아니라 Command Line을 이용한 설치 작업 연동 기능을 추가하여 보다 다양한 환경에서 WinSetup64을 활용할 수 있도록 개선하였습니다.

 

이번 업데이트에서는 단순히 명령줄 옵션을 추가하는 것에 그치지 않고, Command Line 사용에 필요한 옵션 안내와 도움말 탭을 함께 제공하여 외부 프로그램이나 자동화 스크립트에서 WinSetup64의 설치 작업을 호출할 수 있도록 구성하였습니다.

 

https://noways.tistory.com/2364

 

WinSetup64 v4.0 - Command Line 설치 옵션

WinSetup64 v4.0 Command Line 옵션WinSetup64 v4.0에서는 프로그램을 직접 실행하여 GUI에서 작업하는 기존 방식과 함께 Command Line 옵션을 이용한 설치 작업 연동 기능을 추가하였습니다. Command Line을 이용하

noways.tistory.com

 

 

1. Command Line 옵션 및 도움말 탭 추가

v4.0에서 가장 크게 변경된 부분은 Command Line 설치 연동 기능입니다. 기존에는 WinSetup64 프로그램을 직접 실행한 후 GUI에서 디스크와 설치 옵션을 설정해야 했다면, v4.0에서는 Command Line 옵션을 이용하여 필요한 설치 작업을 외부에서 전달할 수 있도록 개선하였습니다.

 

특히 프로그램 내부에 도움말 탭을 추가하여 사용할 수 있는 Command Line 옵션과 관련 정보를 확인할 수 있도록 구성하였습니다. 이를 활용하면 WinSetup64을 다른 자동화 프로그램이나 배치 작업, 설치 스크립트 등과 연동하여 사용할 수 있으며, 반복적으로 동일한 설치 작업을 수행해야 하는 환경에서도 보다 편리하게 활용할 수 있습니다. 또한 GUI 환경에서 직접 설정하는 방식과 Command Line을 이용하는 방식을 함께 사용할 수 있도록 구성하여 사용 환경에 따라 적절한 방법을 선택할 수 있도록 하였습니다.

 

 

2. VHD/X 탑재 해제 오류 개선

기존 버전에서 VHD 또는 VHDX 이미지의 탑재 및 해제 과정에서 발생할 수 있었던 오류 부분도 함께 개선하였습니다. 특히 작업 완료 후 VHD/X가 정상적으로 해제되지 않거나 후속 디스크 작업에 영향을 줄 수 있는 부분을 점검하여 관련 동작을 보완하였습니다.

이를 통해 VHD/X를 활용한 설치 및 디스크 작업 과정에서 보다 안정적으로 작업을 진행할 수 있도록 개선하였습니다.

; --- VHD 해제 처리 ---
Func _VhdAction_Unmount()
    Local $sVhdPath = GUICtrlRead($idInpVhdPath)
    $sVhdPath = StringRegExpReplace($sVhdPath, '^["]|["]$', '') ; [안전장치] 양 끝 쌍따옴표 제거

    If $sVhdPath == "" Then
        Local $iIndex = _GUICtrlListView_GetSelectedIndices($idListVhdFiles)
        If $iIndex <> "" Then $sVhdPath = _GUICtrlListView_GetItemText($idListVhdFiles, Int($iIndex), 1)
    EndIf

    If $sVhdPath == "" Then Return

    _VhdLog(_GetLang("LogUnmountStart") & $sVhdPath)

    Local $tStorageType = DllStructCreate("dword DeviceId;byte VendorId[16]")
    Local $iDeviceId = StringInStr($sVhdPath, ".vhdx") ? 3 : 2
    DllStructSetData($tStorageType, "DeviceId", $iDeviceId)

    ; VIRTUAL_DISK_ACCESS_DETACH | GET_INFO (0x00040000 | 0x00080000)
    Local $aOpen = DllCall("virtdisk.dll", "dword", "OpenVirtualDisk", "ptr", DllStructGetPtr($tStorageType), "wstr", $sVhdPath, "dword", 0x000C0000, "dword", 0, "ptr", 0, "ptr*", 0)
    If @error Or $aOpen[0] <> 0 Then Return

    Local $hVhd = $aOpen[6]

    ; 1. 물리 디스크 번호 확보 (Detach 전에 드라이브 문자 정리용)
    Local $iVhdDiskNum = -1
    Local $tPathSize = DllStructCreate("ulong")
    DllStructSetData($tPathSize, 1, 0)
    DllCall("virtdisk.dll", "dword", "GetVirtualDiskPhysicalPath", "handle", $hVhd, "ptr", DllStructGetPtr($tPathSize), "ptr", 0)
    Local $iBufSize = DllStructGetData($tPathSize, 1)
    If $iBufSize > 0 Then
        Local $tPath = DllStructCreate("wchar[" & Int($iBufSize / 2) + 1 & "]")
        Local $aPath = DllCall("virtdisk.dll", "dword", "GetVirtualDiskPhysicalPath", "handle", $hVhd, "ptr", DllStructGetPtr($tPathSize), "ptr", DllStructGetPtr($tPath))
        If Not @error And $aPath[0] = 0 Then
            Local $sPhysPath = DllStructGetData($tPath, 1)
            Local $aNum = StringRegExp($sPhysPath, "(?i)PhysicalDrive(\d+)", 1)
            If IsArray($aNum) Then $iVhdDiskNum = Int($aNum[0])
        EndIf
    EndIf

    ; 2. Detach 전: 해당 VHD 디스크에 연결된 모든 드라이브 문자 해제
    ;    (파티션 작업으로 할당된 ESP DefineDosDevice 링크 및 assign letter 포함)
    If $iVhdDiskNum >= 0 Then
        For $i = 0 To 25
            Local $sLtr = Chr(65 + $i)
            Local $iDriveDisk = _GetPhysicalDriveNumberAPI($sLtr & ":")
            If $iDriveDisk = $iVhdDiskNum Then
                Local $sDrivePath = $sLtr & ":\"
                ; Mount Manager 영구 매핑 제거
                DllCall("kernel32.dll", "bool", "DeleteVolumeMountPointW", "wstr", $sDrivePath)
                ; DefineDosDevice 임시/심볼릭 링크 제거 (DDD_REMOVE_DEFINITION = 2)
                DllCall("kernel32.dll", "bool", "DefineDosDeviceW", "dword", 2, "wstr", $sLtr & ":", "wstr", "")
                _VhdLog($sLtr & ": 드라이브 문자 해제 (VHD 디스크 " & $iVhdDiskNum & ")")
            EndIf
        Next

        ; $aMounted 추적 목록에서도 해당 Harddisk 항목 제거
        For $m = 0 To $iMountedCount - 1
            If StringInStr($aMounted[$m][1], "Harddisk" & $iVhdDiskNum & "\") Then
                If $aMounted[$m][0] <> "" Then
                    DllCall("kernel32.dll", "bool", "DefineDosDeviceW", "dword", 7, "wstr", $aMounted[$m][0] & ":", "wstr", $aMounted[$m][1])
                    DllCall("kernel32.dll", "bool", "DefineDosDeviceW", "dword", 2, "wstr", $aMounted[$m][0] & ":", "wstr", "")
                EndIf
                $aMounted[$m][0] = ""
                $aMounted[$m][1] = ""
            EndIf
        Next
    EndIf

    ; ESP 시스템 문자 전역 추적 정리
    If $g_sSystemLetter <> "" Then
        DllCall("kernel32.dll", "bool", "DeleteVolumeMountPointW", "wstr", $g_sSystemLetter & ":\")
        DllCall("kernel32.dll", "bool", "DefineDosDeviceW", "dword", 2, "wstr", $g_sSystemLetter & ":", "wstr", "")
        $g_sSystemLetter = ""
    EndIf

    ; 3. 가상 디스크 분리
    DllCall("virtdisk.dll", "dword", "DetachVirtualDisk", "handle", $hVhd, "dword", 0, "dword", 0)
    DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $hVhd)

    If IsObj($g_oVhdDriveCache) Then
        Local $sKey = StringLower($sVhdPath)
        If $g_oVhdDriveCache.Exists($sKey) Then
            $g_oVhdDriveCache.Remove($sKey)
        EndIf
    EndIf

    _VhdLog(_GetLang("LogUnmountDone"))

    ; 탐색기 캐시 갱신
    DllCall("shell32.dll", "none", "SHChangeNotify", "long", 0x08000000, "uint", 0x0000, "ptr", 0, "ptr", 0)
    Sleep(300)
    DllCall("shell32.dll", "none", "SHChangeNotify", "long", 0x00000001, "uint", 0x0000, "ptr", 0, "ptr", 0)
EndFunc

 

3. 디스크 작업 연동 추가

이번 v4.0에서는 디스크 작업 연동 기능도 추가하였습니다. WinSetup64에서 진행하는 설치 과정과 디스크 관련 작업을 연계할 수 있도록 구성하여, 단순한 Windows 설치 도구를 넘어 디스크 구성부터 Windows 설치까지 연결되는 작업 흐름을 만들 수 있도록 개선하였습니다. 특히 Command Line 설치 연동 기능과 함께 활용할 경우 외부 자동화 프로그램에서 필요한 작업을 순차적으로 호출하는 방식으로 구성할 수 있어 활용 범위가 더욱 넓어졌습니다.

 

 

WinSetup64 Command Line 명령 연동 - 움짤(GIF)

 

4. '파티션 백업' 압축률 - LZMS/ESD 지원 추가

 - 백업 시작 시 **'백업 시작' 버튼이 '작업 취소'로 전환**되며, 작업 취소 시 생성된 백업 파일은 **자동으로 정리(삭제)**됩니다.

https://wimlib.net/compression.html

 

wimlib - Compression

Normal/slow (level ≥ 35): "Near-optimal" parsing with matches found using BT4 matchfinder (binary trees with 4 bytes hashing, plus tables with 3 and 2 bytes hashing), along with repeat offset match searching. The compression ratio is better than that of

wimlib.net

 

 

마무리

WinSetup64 v4.0은 기존 GUI 기반의 Windows 설치 기능을 유지하면서 Command Line 설치 연동을 추가한 것이 이번 업데이트의 핵심입니다. Command Line 옵션과 도움말 탭을 통해 외부 프로그램 및 자동화 스크립트와의 연동 환경을 마련했으며, VHD/X 탑재 해제 오류를 개선하고 디스크 작업 연동 기능까지 추가하여 전체적인 설치 작업 흐름을 보완하였습니다.

 

앞으로 WinSetup64을 이용한 Windows 설치 자동화 작업에서 GUI 방식뿐만 아니라 Command Line을 활용한 다양한 자동화 구성에도 활용할 수 있을 것으로 생각됩니다. 이번 v4.0에서는 특히 Command Line을 이용한 설치 연동 환경 구축에 중점을 두고 기능을 개선하였습니다. 원하시면 다음 단계로 **실제 v4.0 소스의 Command Line 옵션을 하나씩 풀어서 설명하는 형태**로 이어서 작성할 수 있습니다.

 

 

반응형
반응형

Remote WinSetup PE v2.0 업데이트

Remote WinSetup PE를 기존 v1.0에서 v2.0으로 업데이트했습니다. 이번 업데이트의 핵심은 PE 환경에서 Windows 설치를 진행하기 전에 InstallConfig.ini에 저장된 디스크 정보와 현재 PE에서 인식된 실제 디스크 정보를 비교하여 설치 대상 디스크를 보다 정확하게 확인하는 기능을 추가한 것입니다.

 

기존 v1.0에서는 InstallConfig.ini에 저장된 DiskNumber를 기준으로 설치 대상 디스크를 찾았습니다. 하지만 PE 환경에서는 디스크 인식 순서가 변경되거나, RST와 같은 스토리지 드라이버가 정상적으로 로드되지 않아 디스크가 일부만 인식되는 경우가 있을 수 있습니다. 이러한 상황에서 잘못된 디스크를 설치 대상으로 선택하는 문제를 방지하기 위해 v2.0에서는 디스크 식별 정보를 추가로 활용하도록 보강했습니다.

 

1. InstallConfig.ini 디스크 정보 보강

v2.0에서는 기존 디스크 및 파티션 정보에 다음 항목을 추가로 읽어옵니다.

  • DiskGuid
  • DiskModel
  • DiskSerial
  • DiskSizeGB

따라서 단순한 디스크 번호뿐만 아니라 실제 디스크의 고유 정보와 하드웨어 정보를 함께 확인할 수 있습니다. 로그에도 다음과 같이 디스크 정보를 출력하도록 변경했습니다. DiskGuid / Model / Serial / SizeGB 이를 통해 PE 환경에서 어떤 디스크가 설치 대상으로 지정되어 있는지 보다 명확하게 확인할 수 있습니다.

[Install]
DiskNumber=0
PartitionNumber=2
DriveLetter=C
PartitionStyle=GPT
FirmwareType=UEFI
BootMode=UEFI
DiskGuid={9FCB2884-5EEF-4834-9B0A-D85A91881D8A}
DiskModel=VMware Virtual NVMe Disk
DiskSerial=VMWare NVME_0000
DiskSizeGB=80
SourceType=WIM
SourcePath=W:\WINSCP\WIM\install.wim
ImageIndex=2
UnattendPath=W:\WINSCP\Panther\unattend.xml
BackupPath=W:\WINSCP\Backup\

 

2. PE 환경에서 실제 디스크 정보 조회

v2.0에서는 별도의 PowerShell이나 WMIC 등에 의존하지 않고 Windows API를 직접 호출하여 디스크 정보를 조회합니다.

 

실제 물리 디스크를 대상으로 다음 정보를 확인합니다.

  • GPT Disk GUID 또는 MBR Signature
  • 디스크 모델명
  • 디스크 시리얼 번호
  • 디스크 전체 용량

또한 물리 디스크의 파티션 레이아웃 정보를 확인하여 GPT와 MBR 환경을 구분할 수 있도록 구성했습니다.

 

 

3. 디스크 식별 정보 기반 매칭

InstallConfig.ini에 저장된 디스크 정보와 PE에서 현재 인식된 디스크 정보를 비교합니다.

 

매칭 우선순위는 다음과 같습니다.

Disk GUID → Serial → Model + Size

 

가장 먼저 Disk GUID를 기준으로 동일한 디스크인지 확인하고, GUID 정보를 사용할 수 없는 경우에는 시리얼 번호를 확인합니다.

GUID와 시리얼 정보가 없는 경우에는 디스크 모델명과 용량을 조합하여 대상 디스크를 확인하도록 구성했습니다.

 

 

4. DiskNumber 변경에도 대응

이번 업데이트에서 중요한 부분은 InstallConfig.ini에 저장된 DiskNumber와 PE 환경에서 실제 인식된 DiskNumber가 달라지는 경우입니다. 예를 들어 설정 당시 대상 디스크가 Disk 0이었다고 하더라도 PE 환경에서는 디스크 인식 순서가 변경되어 동일한 디스크가 Disk 1로 인식될 수 있습니다. v2.0에서는 디스크의 식별 정보가 일치하면 실제 PE에서 확인된 DiskNumber로 다시 매핑합니다.

 

즉,

InstallConfig.ini : Disk 0

이더라도 실제 디스크 식별 결과가

PE 환경 : Disk 1

로 확인되고 GUID 등의 정보가 일치한다면 Disk 1을 실제 설치 대상 디스크로 재지정합니다.

이를 통해 단순한 디스크 번호 변경으로 인해 설치 대상이 잘못 지정되는 문제를 줄일 수 있도록 했습니다.

 

 

[00:47:28] ================================================
[00:47:28]   Remote WinSetup PE v2.0 Installer
[00:47:29]   런타임 펌웨어: UEFI
[00:47:29] ================================================
[00:47:29] 루트에 WINSCP 폴더가 있는 드라이브 검색 중...
[00:47:29] [OK] WINSCP root: D:\WINSCP\
[00:47:29] [OK] 설정 파일: D:\WINSCP\InstallConfig.ini
[00:47:29] [MAP] W:\WINSCP\WIM\install.wim -> D:\WINSCP\WIM\install.wim
[00:47:29] [MAP] W:\WINSCP\Panther\unattend.xml -> D:\WINSCP\Panther\unattend.xml
[00:47:29] [MAP] W:\WINSCP\Backup\ -> D:\WINSCP\Backup\
[00:47:29] Disk=0 Part=2 Letter=C
[00:47:29] Style=GPT BootMode=UEFI Firmware(INI)=UEFI
[00:47:29] DiskGuid={9FCB2884-5EEF-4834-9B0A-D85A91881D8A} Model=VMware Virtual NVMe Disk Serial=VMWare NVME_0000 SizeGB=80
[00:47:29] SourceType=WIM Index=2
[00:47:29] SourcePath(remap)=D:\WINSCP\WIM\install.wim
[00:47:29] UnattendPath(remap)=D:\WINSCP\Panther\unattend.xml
[00:47:29] 대상 디스크 식별 검증 중...
[00:47:29] [DISK] #0 Guid={9FCB2884-5EEF-4834-9B0A-D85A91881D8A} Model=VMware Virtual NVMe Disk Serial=VMWare NVME_0000 SizeGB=80
[00:47:29] [OK] 대상 디스크 검증 완료: Disk 0
[00:47:29] [OK] 소스 확인: D:\WINSCP\WIM\install.wim
[00:47:29] 설치 대상 파티션 확인 중... Disk 0 Part 2
[00:47:29] [OK] 설정 드라이브 문자 사용: C:\
[00:47:29] [OK] 대상 드라이브: C:\ | BootMode=UEFI | Style=GPT
[00:47:29] 포맷 확인 후 설치를 진행합니다...
[00:47:40] [AUTO] '포맷 확인' 타임아웃 — Yes 로 진행합니다.
[00:47:40] 1/4 - Windows 파티션을 빠른 포맷합니다...
[00:47:40] C: 드라이브의 모든 데이터가 삭제됩니다.
[00:47:46] Microsoft DiskPart 버전 10.0.19041.3636
[00:47:46] Copyright (C) Microsoft Corporation.
[00:47:46] 컴퓨터: MINWINPC
[00:47:46] 0 디스크가 선택한 디스크입니다.
[00:47:46] 2 파티션이 선택한 파티션입니다.
[00:47:46] 0 퍼센트 완료
  100 퍼센트 완료
[00:47:46] DiskPart가 볼륨을 성공적으로 포맷했습니다.
[00:47:46] DiskPart에서 드라이브 문자 또는 탑재 지점을 할당했습니다.
[00:47:46] DiskPart 마치는 중...
[00:47:47] [OK] 빠른 포맷 완료: C:\
[00:47:47] 2/4 - 설치 이미지 준비...
[00:47:47] [OK] 설치 이미지: D:\WINSCP\WIM\install.wim
[00:47:47] 3/4 - WIM 이미지를 적용하는 중입니다...
[00:47:47] [OK] wimlib: X:\Windows\wimlib-imagex.exe
[00:47:47] [INFO] 이미지 크기: 5197.5 MB
[00:47:47] 실행: "X:\Windows\wimlib-imagex.exe" apply "D:\WINSCP\WIM\install.wim" 2 "C:\." --verbose
[00:47:47] 작업 폴더: X:\Windows
[00:47:47] [PHASE] Applying image 2 ("Windows 10 22H2(19045.7727) Pro x64 Hotfix260914") from "D
[00:47:47] [PHASE] Creating files
[00:48:03] Creating files: 146119 of 146119 (100%) done
[00:48:03] [PHASE] Extracting file data
[00:49:40] Extracting file data: 10 GiB of 10 GiB (100%) done
[00:49:41] [PHASE] Applying metadata to files
[00:49:51] Applying metadata to files: 146119 of 146119 (100%) done
[00:49:52] [PHASE] Done applying WIM image.
[00:49:52] [INFO] wimlib exit (PID=1316, WaitClose=1)
[00:49:52] [OK] wimlib 이미지 전개 완료
[00:49:52] OEM / Unattend 복사...
[00:49:52] $OEM$ copy: D:\WINSCP\$OEM$
[00:49:52] [OK] $OEM$ 복사 완료
[00:49:52] [OK] Unattend copy: C:\Windows\Panther\unattend.xml
[00:49:52] 4/4 - BCD 부팅 구성...
[00:49:53] Boot setup: UEFI
[00:49:53] 실행: bcdboot "C:\Windows" /f UEFI /s Z: /l ko-KR
[00:49:54] [OK] BCD configured
[00:49:54] ================================================
[00:49:54]   모든 작업이 완료되었습니다.  경과 시간: 02:24
[00:49:54]   대상 드라이브: C:\  Boot: Z:\  Mode: UEFI
[00:49:54] ================================================
[00:49:57] [INFO] 재시작을 보류했습니다.

 

5. 디스크를 찾지 못하면 설치 중단

반대로 InstallConfig.ini에 저장된 디스크 식별 정보와 일치하는 디스크를 PE 환경에서 찾지 못한 경우에는 설치 작업을 진행하지 않습니다. 특히 PE에서 물리 디스크 자체가 정상적으로 인식되지 않는 경우에는 다음과 같이 설치를 중단할 수 있습니다.

  • RST 드라이버 누락
  • 스토리지 드라이버 로드 실패
  • 디스크 연결 상태 문제
  • InstallConfig.ini와 실제 설치 대상 디스크 정보 불일치

이 경우 대상 디스크 식별 실패 상태를 표시하고 Windows 설치 작업을 중단하도록 변경했습니다. 따라서 잘못된 디스크에 Windows를 설치하는 상황을 사전에 방지할 수 있도록 구성했습니다.

 

6. RST 드라이버 문제 확인에도 활용

이번 디스크 식별 기능은 특히 PE 환경에서 Intel RST 등의 스토리지 드라이버가 정상적으로 로드되었는지 확인하는 과정과도 연결됩니다. PE에서 디스크가 정상적으로 인식되지 않으면 물리 디스크 검색 과정에서 대상 디스크를 찾을 수 없게 됩니다. 이 경우 Remote WinSetup PE에서는 설치를 강제로 진행하지 않고 디스크 식별 실패로 처리하여 스토리지 드라이버 또는 디스크 연결 상태를 확인하도록 합니다.

 

7. 기존 InstallConfig.ini와의 호환

디스크 식별 정보가 없는 기존 InstallConfig.ini에 대해서는 별도의 처리를 적용했습니다. DiskGuid, DiskSerial, DiskModel 등의 정보가 없는 경우에는 기존과 같이 DiskNumber를 기준으로 작업을 진행합니다. 따라서 기존 설정 파일을 사용하는 환경에서도 기본적인 설치 작업이 가능하도록 구성했습니다.

 

8. 설치 전 검증 단계 추가

Remote WinSetup PE v2.0의 전체 흐름은 기존 설치 과정에 디스크 식별 검증 단계가 추가된 형태입니다.

InstallConfig.ini 로드

↓

설치 경로 및 설정 정보 확인

↓

대상 디스크 GUID / 모델 / 시리얼 / 용량 확인

↓

PE에서 실제 물리 디스크 검색

↓

디스크 식별 정보 매칭

↓

필요한 경우 DiskNumber 재매핑

↓

대상 디스크 검증 완료

↓

파티션 확인 및 Windows 설치 진행

이렇게 설치를 시작하기 전에 실제 대상 디스크를 한 번 더 확인하도록 변경했습니다.

 

9. 로그 정보도 보강

v2.0에서는 디스크 검색 과정도 로그로 확인할 수 있도록 변경했습니다. PE에서 확인되는 각 디스크에 대해 다음과 같은 정보를 기록합니다. DISK # / GUID / Model / Serial / SizeGB 그리고 대상 디스크가 정상적으로 확인되면 검증 완료 및 DiskNumber 매핑 결과를 로그에 표시합니다. 반대로 대상 디스크를 찾지 못한 경우에는 디스크 식별 실패와 함께 인식된 물리 디스크가 없는 경우 스토리지 드라이버를 확인할 수 있도록 안내합니다.

 

 

Remote WinSetup PE v2.0

이번 v2.0 업데이트는 새로운 설치 기능을 추가하기보다는 원격 Windows 설치 과정에서 설치 대상 디스크를 보다 정확하게 식별하고 검증하는 부분을 강화한 업데이트입니다. 특히 PE 환경에서 디스크 번호가 변경되는 상황이나 RST와 같은 스토리지 드라이버 문제로 디스크 인식에 문제가 발생하는 상황을 고려하여, DiskNumber → Disk GUID → Model → Serial → Size 등의 정보를 이용해 실제 설치 대상 디스크를 확인하도록 보강했습니다.

 

이를 통해 Remote WinSetup PE에서 Windows 설치를 진행하기 전에 "현재 PE에서 인식된 디스크가 실제로 InstallConfig.ini에서 지정한 디스크가 맞는가?"를 먼저 확인할 수 있도록 구성했습니다. 앞으로도 Remote WinSetup은 원격 Windows 설치 과정에서 발생할 수 있는 디스크 인식 및 대상 지정 문제를 줄이고, PE 환경에서도 보다 안정적으로 자동 설치가 진행될 수 있도록 기능을 보강해 나갈 예정입니다.

 

Remote WinSetup PE v2.0 - 디스크 정보 매칭 보강 - 움짤(GIF)

반응형
반응형

WinRE Manager 기능 변경

기존 WinRE Manager는 시스템에 등록된 WinRE 환경을 확인하고, reagentc를 이용하여 WinRE를 등록하거나 필요에 따라 BCD BootOnce 방식으로 PE를 1회 부팅하는 구조로 동작했습니다. 이번 업데이트에서는 이러한 기존 처리 방식을 일부 변경하여, WinRE Manager의 주요 기능을 PE 1회 부팅 환경에 맞춰 보다 명확하게 구성했습니다.

 

https://noways.tistory.com/2359

 

wimlib WIMUPDATE를 활용한 WIM 파일 자동 구성

WinToHDD를 걷어내기 위한 두 번째 단계 - WinRE Manager v2.0 1. winre.wim과 boot.wim이 준비되면 WIM 파일에 사용할 파일을 추가하는 과정(단계)을 추가하려고 한다. * 추가는 wimlib의 WIMUPDATE 기능을 사용하며,

noways.tistory.com

 

https://noways.tistory.com/2358

 

WinRE.wim 대안 boot.wim 연동 및 ReAgentc 기반 복구 환경 재구성...

WinToHDD를 걷어내기 위한 첫 번째 단계 - WinRE Manager v1.0 WinRE Manager — 작업 개요와 시스템 구상WinRE Manager는 Windows 복구 환경(WinRE) 또는 PE 이미지를 점검 → 확보 → 등록 → 1회 부팅까지 한 번에 처

noways.tistory.com

 

1. 기존 버전의 동작 방식

기존 버전에서는 먼저 현재 시스템의 WinRE 구성 상태와 reagentc 사용 가능 여부를 확인합니다. 로컬에 Winre.wim이 존재하는 경우 해당 파일을 사용하고, 필요한 경우 Windows 설치 이미지에서 Winre.wim을 추출하거나 서버에서 복구 이미지를 다운로드하는 방식으로 WIM 파일을 확보했습니다. 확보한 WIM 이미지에는 LaunchBar 파일을 추가한 후 최적화 작업을 수행하고, 이후 시스템 환경에 따라 다음과 같이 처리했습니다.

  • reagentc 사용 가능 → WinRE 시스템 등록
  • reagentc 사용 불가 → BCD BootOnce 방식으로 PE 1회 부팅
  • WinRE 등록 실패 → BCD 방식으로 대체 처리
  • 작업 완료 후 사용자 확인을 통해 시스템 재부팅

즉, 기존 버전은 WinRE 시스템 등록과 PE 1회 부팅을 함께 지원하는 구조였습니다.

 

2. 변경된 새로운 처리 방식

2버전에서는 기존의 WinRE 등록 중심 구조에서 벗어나 PE 1회 부팅을 위한 WIM 처리 과정에 초점을 맞추도록 변경했습니다. WIM 이미지를 확보한 후 바로 사용하는 것이 아니라, 먼저 고정된 경로인 C:\boot_sdi\boot.wim 으로 WIM 파일을 정규화합니다.

기존에 다른 위치에 WIM 파일이 존재하더라도 최종적으로 C:\boot_sdi\boot.wim 경로에 맞춰 처리하기 때문에 이후 BCD 설정 과정에서도 동일한 경로를 기준으로 작업할 수 있도록 변경했습니다.

 

3. WIM 처리 과정 변경

새로운 버전에서는 다음과 같은 순서로 작업이 진행됩니다.

 

STEP 1 — WIM 확보

로컬에 사용할 수 있는 WIM 이미지가 있는지 확인합니다.

필요한 경우 로컬 설치 이미지에서 Winre.wim을 추출하거나 서버에서 WIM 이미지를 다운로드합니다.

다운로드한 파일은 크기뿐만 아니라 SHA-1 값을 이용하여 파일의 무결성을 확인합니다.

 

STEP 2 — WIM 경로 정규화

확보한 WIM 이미지를

C:\boot_sdi\boot.wim

경로로 복사하여 고정합니다.

이미 해당 경로에 WIM 파일이 존재하는 경우에는 별도의 복사 작업 없이 기존 파일을 사용할 수 있도록 처리합니다.

이 과정을 추가하면서 이후 BCD BootOnce 설정에서 사용할 WIM 경로를 일관되게 유지할 수 있도록 변경했습니다.

 

STEP 3 — LaunchBar 파일 추가

정규화된 boot.wim에 LaunchBar 파일을 추가합니다.

WIM의 이미지 정보를 확인하여 실제 부팅에 사용되는 인덱스를 찾은 후 LaunchBar의 Tools, Windows 폴더를 WIM 이미지 내부에 추가하고 최적화 작업을 진행합니다.

따라서 PE로 부팅한 이후에도 필요한 LaunchBar 환경을 함께 사용할 수 있도록 구성됩니다.

 

STEP 4 — BCD BootOnce 설정

마지막으로 C:\boot_sdi\boot.wim을 대상으로 BCD의 1회 부팅 환경을 구성합니다.

이 과정에서 boot.sdi의 위치를 확인하고 필요한 경우 C:\boot_sdi\boot.sdi로 복사한 다음, BCD의 RAMDISK 부팅 설정에 해당 boot.sdi를 연결합니다.

설정이 완료되면 시스템 재부팅 시 지정된 WIM 이미지로 PE가 1회 부팅되도록 구성됩니다.

 

 

 


로컬 이미지 및 `winre.wim` 추출 후 RST 드라이버 통합 기능 추가 반영

(서버의 `boot.wim`에는 RST 드라이버가 이미 통합되어 있으므로 해당 작업은 생략)

 

▶ 추가적인 드라이버 통합이 필요한 경우, 사전에 \WinSCP\Drivers 경로에 해당 드라이버를 추가

\WINSCP\DRIVERS
├─Storage
│  └─IRST_VMD
│      │  iaStorVD.cat
│      │  iaStorVD.inf
│      │  iaStorVD.sys
│      │  RstMwEventLogMsg.dll
│      │  RstMwService.exe
│      │  
│      ├─HsaComponent
│      │      iaStorHsaComponent.cat
│      │      iaStorHsaComponent.inf
│      │      
│      └─HsaExtension
│              iaStorHsa_Ext.cat
│              iaStorHsa_Ext.inf
│              
└─TouchPad

 


 

 

4. 가장 큰 변경점

이번 기능 변경에서 가장 중요한 부분은 WIM 파일의 사용 경로와 부팅 방식을 단순화한 것입니다. 기존 버전은 reagentc의 WinRE 등록 여부에 따라 WinRE 등록 또는 BCD BootOnce 방식으로 분기했지만, 변경된 버전에서는 WIM을 먼저 C:\boot_sdi\boot.wim으로 정규화한 다음 LaunchBar를 적용하고 BCD BootOnce를 설정하는 흐름으로 변경했습니다. 결과적으로 전체 작업 과정은 다음과 같이 정리됩니다.

 

WIM 확보 → C:\boot_sdi\boot.wim 정규화 → LaunchBar 추가 및 최적화 → BCD BootOnce 설정 → 재부팅 이번 변경을 통해 WinRE 시스템 등록 자체보다는 PE 1회 부팅을 위한 WIM 구성과 BCD 부팅 환경 구축에 초점을 맞춘 구조로 기능이 변경되었습니다. 특히 WIM 파일의 위치가 서로 달라도 최종적으로 동일한 경로를 사용하도록 구성했기 때문에, 이후 BCD 설정 과정에서 WIM 경로를 일관되게 관리할 수 있다는 점이 이번 변경의 주요 내용입니다. 

 

WinRE Manager v3.0 BCD BootOnce 방식으로 정규화 기능 개선 - 움짤(GIF)

 

 

■ 동영상 제목 클릭 후 전체화면(1080P)시청 가능합니다.

 

정보가 도움이 되었다면 아래 링크로 커피를 후원 해주세요. ^^

donaricano-btn

반응형

+ Recent posts