WindowsPEの作り方，アプリケーションの追加方法

#WindowsPEとは？
Windows Preinstall Environmentの略。
Microsoftが無償で公式に配布しているツールの1つで，簡易的なWindowsのOS(=WindowsPE)をUSBメモリやCDに入れ，そこから"Windowsもどき"であるWindowsPEを起動することができるツールです。
(なお，この記事では，WindowsPEのメリットや使い方を説明しません。)
Windows10に準拠するWindowsPEのバージョンは`WindowsPE 6.0`となります。
今回は，`Windows10`を用いて`WindowsPE 6.0`のUSBメモリを作ります。

## おことわり
私自身も勉強中のため，間違い等があれば是非教えてください。

##実証環境
Windows 10 Pro (64bit) Version:1803 

## 必要なもの
- Windows10で動作しているPC
- WindowsPEを入れるもの(USBメモリ等)
    - WindowsPEだけで800MB程度の容量が必要になります。
    - USB3.0対応の大容量のUSBメモリをお勧めします。

##作り方
**この項目は，初めてWindowsPEを作る際に限り実行します。**

1. Windows ADK(Windows Assessment and Deployment Kit)をPCにインストールします。
    [Microsoft公式ダウンロードサイト](http://go.microsoft.com/fwlink/p/?LinkId=526803)からダウンロード，インストールをします。
    途中で機能を選択する画面が出てくると思いますが，「Windows Preinstallation Environment (Windows PE)」にチェックを入れ忘れないようにしてください。

2. 「展開およびイメージング ツール環境」を**管理者権限**で起動します。
    スタートメニュー→Windows Kits内にあると思います。
    見つけたら，右クリックし「その他」→「管理者として実行」をクリックします。
  
3. 「 展開およびイメージング ツール環境」で，以下のコマンドを打ち込みます。
このコマンドで，WindowsPEの元となるファイルをコピーすることができます。
コピー先は自由に変えても大丈夫ですが，今後の操作の際に煩わしくなるため，できるだけ上位層とすることをおすすめします。
また，多くの参考にできるサイトがこの場所にこの名前でコピーしているので，このままのほうが便利です。

    ```:64bit版WindowsPEの場合
    copype amd64 C:\WinPE_amd64
    ```

    ```:32bit版WindowsPEの場合
    copype x86 C:\WinPE_x86
    ```

3. マウントします。
方法は，下記を参照してください。

5. スクラッチ領域を追加します。
1GBを超えるRAMを搭載したPCでは512MB、それ以外の場合は32MBです。有効な値は32，64，128，256，512です。

    ```:64bit版WindowsPEの場合
    Dism /Set-ScratchSpace:512 /Image:"C:\WinPE_amd64\mount"
    ```

    ```:32bit版WindowsPEの場合
    Dism /Set-ScratchSpace:512 /Image:"C:\WinPE_x86\mount"
    ```

6. アンマウントをします。
方法は，下記を参照してください。
これが終わったら，次の章に進んでください。

##マウント，アンマウントとアプリケーションの導入
すべて**管理者権限の[展開およびイメージングツール環境]**で操作します。

1. WindowsPEのブートイメージをマウントします。
    
    ```:64bit版WindowsPEの場合
    Dism /Mount-Image /ImageFile:"C:\WinPE_amd64\media\sources\boot.wim" /index:1 /MountDir:"C:\WinPE_amd64\mount"
    ```

    ```:32bit版WindowsPEの場合
    Dism /Mount-Image /ImageFile:"C:\WinPE_x86\media\sources\boot.wim" /index:1 /MountDir:"C:\WinPE_x86\mount"
    ```

この操作をすることで，`C:\WinPE_amd64\mount\`内に`Program Files` `Program Files(x86)` `ProgramData ` `Windows` `ユーザー`の5つのフォルダが作成されます。



2. アプリケーションの導入を行います。
普段使っているWindowsと同様に，アプリケーションは`C:\WinPE_amd64\mount\Program Files`(64bit版)もしくは`C:\WinPE_x86\mount\Program Files`(32bit版)にコピペします。
Explorerを用いたGUI操作で大丈夫です。
管理者権限が必要な操作のため，Windowsが管理者権限の確認をしてきますが，気にせずに管理者としてコピペをしてください。
システム用のツールは`C:\WinPE_amd64\mount\Windows\System32`(64bit版)もしくは`C:\WinPE_x86\mount\Windows\System32`(32bit版)にコピペします。

    初回は，各種ドライバーの導入をここで行います。
    この内容については，[別途Qiita記事](https://qiita.com/ta_b0_/items/1f481f58f897457af770)にまとめました。
    ちなみに私は，[このサイト(WinFE)](https://www.kazamiya.net/WinFEforWin10)や[このサイト(Qiita)](https://qiita.com/msakamoto_sf/items/3fff0e7c68e6aaf1a60e)，[このサイト(Microsoft公式)](https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn938382%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396)を参考に行いました。
`Dism /image:C:\WinPE_amd64\mount /add-package /packagepath:hogehoge`(hogehogeにパッケージ名を書く)ことでできます。

3. アンマウントをします。
このとき，ExplorerなどWindowsPEの作業に関係するプログラムは**必ず閉じてから**以下のコマンドを実行してください。

    ```:64bit版WindowsPEの場合
    Dism /unmount-image /mountdir:C:\WinPE_amd64\mount\ /commit
    ```

    ```:32bit版WindowsPEの場合
    Dism /unmount-image /mountdir:C:\WinPE_x86\mount\ /commit
    ```
この操作をすることで，`C:\WinPE_amd64\mount`(64bit版)や`C:\WinPE_x86\mount`(32bit版)内のファイルが処理されると同時に，`mount`フォルダ内が空になります。
万が一，Explorerの閉じ忘れ等でアンマウントに失敗した場合は以下のコマンドを実行します。

    ```:64bit版WindowsPEの場合
    Dism /unmount-image /mountdir:C:\WinPE_amd64\mount\ /discard
    ```

    ```:32bit版WindowsPEの場合
    Dism /unmount-image /mountdir:C:\WinPE_x86\mount\ /discard
    ```
4. USBメモリ等にWindowsPEの内容をコピーします。
    `E:\`は，USBメモリのドライブ名です。
PCの環境によっては`F:\`等の場合もあるので，各自で確認してください。

    ```:64bit版WindowsPEの場合
    MakeWinPEMedia /UFD C:\WinPE_amd64 E:
    ```

    ```:32bit版WindowsPEの場合
    MakeWinPEMedia /UFD C:\WinPE_x86 E:
    ```
    この際，USBメモリがフォーマットされます。
    その確認をされるので`y`と入力します。

    もしくは，iso形式で出力するのであれば，
    
    ```:64bit版WindowsPEの場合
    MakeWinPEMedia /iso C:\WinPE_amd64 C:\WinPE_amd64\WinPE_amd64.iso
    ```

    ```:32bit版WindowsPEの場合
    MakeWinPEMedia  /iso C:\WinPE_x86 C:\WinPE_x86\WinPE_x86.iso
    ```
    これにて完成です。

##注意事項
マウントした後，アンマウントをするまでの間に，マウントコマンドを入力したシェルは絶対に消さないでください。
同じシェルでしかアンマウントができません。
万が一，誤って消してしまった場合は，`dism /cleanup-wim`と打ち込むことで強制的にマウントした情報を取り消すことができます。


ただし，

##起動方法
BIOSやUEFIの起動順序の設定で，USBメモリが先頭になるようにしてからPCを起動すると読み込まれます。
起動画面は，コマンドプロンプトの画面です。

さきほど追加したアプリケーションは`X:\`内にあります。
普段使っているCドライブは`C:\`にあります。外付けデバイスのような感覚で使えます。

##アプリケーションの追加方法
「マウント，アンマウントとアプリケーションの導入」を最初から行います。
`mount`フォルダ内のデータがアンマウントをする度に消去されますが，マウントする度に復活しますのでご安心ください。

#作業フォルダの削除方法
[こちら](https://qiita.com/ta_b0_/items/a098f8bf3d62bff719ff)を参考にしてください。

#おまけ
Githubに上記の作業をまとめたbatファイルを作成しました。
https://github.com/ta-b0/Make_WindowsPE

# 参考
[WinPE: パッケージの追加 (オプション コンポーネント リファレンス)](https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn938382%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396)
[WinPE: マウントとカスタマイズ](https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn938390(v=vs.85).aspx)
[WinFE based on WinPE for Windows 10](https://www.kazamiya.net/WinFEforWin10)