2015年6月20日 星期六

Windows 7 系統安裝碟之自動掛載印象檔篇

自從 5 月初購入 NUC5i5RYH 後就有了 USB 3.0 的 Port 能使用!
(到了 2015 年才終於有了 USB 3.0 的主機,
 對資訊人員來說好像真的過時已久…)

過去使用 USB 安裝 Windows 7 時總覺得載入不夠快,
原本想說先試著查詢一下如何將 USB 3.0 的驅動封裝進印象檔內,
但封裝後的測試結果仍然無法支援 xHCI 安裝,
開進安裝畫面後連滑鼠、鍵盤都無法使用…

不過一週後,
有網友看了本人過去使用 Grub4Dos USB 系統安裝碟而詢問了很多設定問題,
這時才又開始想說如果能在安裝畫面出來前就先掛載好印象檔的話,
應該會方便許多!

(本篇是延伸 Grub4Dos 系統安裝碟 的額外內容,
 試過 Windows 8 也行)

這次研究花了快 3 週,
且查詢的結果多半是與 WinPE 相關,
畢竟本人不是很想去鑽 WinPE,
所以很多都不是我想要的正解,
不過最後還是試出來了(後來發覺與 WinPE 還是有些關聯……)!

以前使用 Grub4Dos 進入 Windows 7 系統安裝項目後,
等出現安裝畫面時就要利用 Shift + F10 開啟「命令提示字元」,
接著手動輸入指令進行印象檔掛載作業,
否則按下開始安裝後就會跳出找不到光碟機的視窗…

前置作業

在開始之前得先準備 2 項工具:
  1. Windows 7 ISO 印象檔
  2. UltraISO(可以搜尋 portable 版)
第一步:
使用 UltraISO 開啟 Windows 7 的 ISO 印象檔,
並從 sources 資料夾中尋找 boot.wim
ISO 中 sources\boot.wim 檔案

第二步:
將 boot.wim 檔案解出至自己指定的位置,
以本人為例是指定在 D:\WindowsMake\Driver(當初是為了測試整合 USB 3.0 Driver)。

第三步:
使用記事本將下面 3 組指令複製貼上並儲存成「dism_mount.bat」、「dism_commit.bat」及「dism_discard.bat」,
這 3 個批次檔與 boot.wim 都放在同一個資料夾下
dism_mount.bat:
mkdir mount
dism /mount-wim /wimfile:.\boot.wim /index:2 /mountdir:.\mount
dism_commit.bat:
dism /unmount-wim /mountdir:.\mount /commit
rmdir /s /q .\mount
dism_discard.bat(這是為了意外關機造成無法再 mount 及 commit 而準備的):
dism /unmount-wim /mountdir:.\mount /discard
rmdir /s /q .\mount

如此一來前置準備作業就好了。


掛載/修改 boot.wim 檔案

第一步:
執行剛剛所建立的 dism_mount.bat
這時會跳出一個命令提示字元視窗,
等候進度條跑到 100% 後視窗會自動關閉,
然後此目錄會看到一個名為「mount」的資料夾出現,
本執行目的是把 boot.wim index 2 的內容掛載到 mount 資料夾內。
掛載 boot.wim index 2 至 mount 資料夾

第二步:
使用記事本新增 Run.bat 批次檔。
Run.bat:
@echo off
set USBDRIVE=
FOR %%x IN (C D E F G H I J K L N M O P Q R S T U V W X Y Z) DO IF exist %%x:\imdisk\SetupImDisk.CMD cd /d %%x:\ && (call set USBDRIVE=%%x:)
pushd %USBDRIVE%\imdisk\
rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 132 .\imdisk.inf
imdisk -a -f %USBDRIVE%\Windows7\Windows7SP1.iso -m #:
說明:
第 1 行:不顯示執行結果
第 2 行:建立全域變數以儲存搜尋分區代號後的結果
第 3 行:主要內容搜尋所有分區根目錄下 imdisk\SetupImDisk.CMD 的這個檔案,
    因為本人的 USB 隨身碟根目錄下會放置 imdisk 目錄,
    且裡面還有 SetupImDisk.CMD 的檔案,
    其目的為找出這個檔案在哪一個分區中
    然後進入該分區內,
    並回傳分區代號給全域變數
不這麼做的話,
當第 3 行執行完,
後面的指令會無法延續分區代號搜尋後的結果!
第 4 行:進入 imdisk 所在的分區目錄之中
第 5 ~ 6 行:執行 imdisk 相關設定及掛載 Windows7SP1.iso 印象檔

第三步:
使用記事本新增 winpeshl.ini 設定檔。
winpeshl.ini:
[LaunchApps]
Run.bat
%SystemDrive%\setup.exe
第 1 行:請參照 Mircosoft Winpeshl.ini 相關說明,
    這是標準循序啟動多項程式的開頭
第 2 行:執行剛剛所新增的 Run.bat
第 3 行:執行根目錄下的 setup.exe 以進行安裝
(根據 Winpeshl.ini 說明得知結束殼層應用程式時會重新啟動)

第四步:
將上面所新增的 Run.bat 及 winpeshl.ini 2 個檔案進行複製。

第五步:
進入到「mount」資料夾之內的「Windows\System32」目錄下,
貼上 Run.bat winpeshl.ini 2 個檔案。

boot.wim 在此已修改完畢,
接著是將它進行儲存。


儲存 boot.wim 修改結果

直接執行 dism_commit.bat 批次檔就能完成 boot.wim 的存檔!
存檔是最花時間的,
每次存檔都花了我快 10 分鐘,
尤其是測試了將近 30 次………

替換 Windows 7 ISO 印象檔中的 boot.wim

再度使用 UltraISO 開啟 Windows 7 ISO 印象檔,
然後把剛剛修改完的 boot.wim 檔案拉進印象檔的 sources 目錄下,
這時會跳出取代檔案的視窗,
按下「是」即可,
最後將此印象檔進行存檔便完成了!


系統印象檔存回 USB 系統安裝隨身碟

將修改完的系統印象檔存回 USB 系統安裝隨身碟的 Windows7 目錄下,
再使用 USB 開機進入 Windows 7 系統安裝就會自動掛載系統印象檔,
就不用再思考該如何輸入 imdisk 的相關指令了!

沒有留言:

張貼留言