(到了 2015 年才終於有了 USB 3.0 的主機,
對資訊人員來說好像真的過時已久…)
過去使用 USB 安裝 Windows 7 時總覺得載入不夠快,
原本想說先試著查詢一下如何將 USB 3.0 的驅動封裝進印象檔內,
但封裝後的測試結果仍然無法支援 xHCI 安裝,
開進安裝畫面後連滑鼠、鍵盤都無法使用…
不過一週後,
有網友看了本人過去使用 Grub4Dos USB 系統安裝碟而詢問了很多設定問題,
這時才又開始想說如果能在安裝畫面出來前就先掛載好印象檔的話,
應該會方便許多!
(本篇是延伸 Grub4Dos 系統安裝碟 的額外內容,
試過 Windows 8 也行)
這次研究花了快 3 週,
且查詢的結果多半是與 WinPE 相關,
畢竟本人不是很想去鑽 WinPE,
所以很多都不是我想要的正解,
不過最後還是試出來了(後來發覺與 WinPE 還是有些關聯……)!
以前使用 Grub4Dos 進入 Windows 7 系統安裝項目後,
使用 UltraISO 開啟 Windows 7 的 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:
如此一來前置準備作業就好了。
執行剛剛所建立的 dism_mount.bat,
這時會跳出一個命令提示字元視窗,
等候進度條跑到 100% 後視窗會自動關閉,
然後此目錄會看到一個名為「mount」的資料夾出現,
本執行目的是把 boot.wim index 2 的內容掛載到 mount 資料夾內。
第二步:
使用記事本新增 Run.bat 批次檔。
Run.bat:
第 1 行:不顯示執行結果
第 2 行:建立全域變數以儲存搜尋分區代號後的結果
第 3 行:主要內容搜尋所有分區根目錄下 imdisk\SetupImDisk.CMD 的這個檔案,
因為本人的 USB 隨身碟根目錄下會放置 imdisk 目錄,
且裡面還有 SetupImDisk.CMD 的檔案,
其目的為找出這個檔案在哪一個分區中,
然後進入該分區內,
並回傳分區代號給全域變數
第 5 ~ 6 行:執行 imdisk 相關設定及掛載 Windows7SP1.iso 印象檔
第三步:
使用記事本新增 winpeshl.ini 設定檔。
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 在此已修改完畢,
接著是將它進行儲存。
等出現安裝畫面時就要利用 Shift + F10 開啟「命令提示字元」,
接著手動輸入指令進行印象檔掛載作業,
否則按下開始安裝後就會跳出找不到光碟機的視窗…
前置作業
在開始之前得先準備 2 項工具:- Windows 7 ISO 印象檔
- 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:.\mountdism_commit.bat:
dism /unmount-wim /mountdir:.\mount /commit rmdir /s /q .\mountdism_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 的檔案,
其目的為找出這個檔案在哪一個分區中,
然後進入該分區內,
並回傳分區代號給全域變數
不這麼做的話,第 4 行:進入 imdisk 所在的分區目錄之中
當第 3 行執行完,
後面的指令會無法延續分區代號搜尋後的結果!
第 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 的相關指令了!
沒有留言:
張貼留言