CABファイルは通常エクスプローラ上でダブルクリックすると自動的にインストールできる。
これは、実際にはシェルの関連付けによってCABインストーラ(wceload.exe)が呼ばれることで実現されている。
[HKEY_CLASSES_ROOT\.cab]
@="cabfile"[HKEY_CLASSES_ROOT\cabfile]
@="CAB File"[HKEY_CLASSES_ROOT\cabfile\DefaultIcon]
@="\\Windows\\wceload.exe,-101"[HKEY_CLASSES_ROOT\cabfile\Shell\Open\Command]
@="\\Windows\\wceload.exe \"%1\""
さてwceload.exeには引数があって、自作のプログラムから呼び出す場合は引数を指定することでサイレントインストールを実行することができるようになっている。
/noaskdest | インストール先ディレクトリの問合せを行わない。 CABファイルで指定されているデフォルトのインストール先が自動的に設定される。 |
/noui | インストール中のUI表示を行わない。 Yes/Noのような問合せ(例えばファイルを上書きするかどうかといったダイアログ)は自動的にYesが選択される。 |
wceload /noaskdest /noui \hogehoge.CAB
ただし、自作のsetup.dll内で独自にメッセージボックスなどのUI処理を行っている場合は、当然このオプションの影響が自動的には及ばない。
オプションを認識してサイレントインストールにも対応可能にするには、setup.dll内でGetCommandLineを使ってwceload.exeが起動した際のコマンドライン文字列を取得して、/noui オプションが含まれているかどうかを判断する。で、オプションが含まれていたらUI処理をスキップするようにしておく。これでok。
参考:TheMSsForum.com >> PocketPC Developer >> Setup DLL deficiency - The Microsoft Software Forum
おまけの隠しレジストリ(未確認)
[HKEY_LOCAL_MACHINE\Software\Apps\Microsoft Application Installer] | |
"fAskDest" | /noaskdestを指定しない時のデフォルト (0:/noaskdest, 1:/askdest) |
"fNoUI" | /nouiを指定しない時のデフォルト (0:/UIあり, 1:UIなし) |
"nDynamicDelete" | /delete nまたは/nodeleteを指定しない時のデフォルト (0:CABを残す, 2:CAB削除) |
"Supported" | 対応プラットフォームを追加? |
"fEnableCef" | ??? |
おまけの隠しオプション(未確認)
/delete 0 | インストール後にCABファイルを削除しない |
/delete 1 | インストール後にCABファイルを削除する |
/delete 2 | CABファイルを削除しながらインストールする(空き容量が厳しい場合に) |
/askdest | インストール先ディレクトリを指定可能にする |
/noaskdest | CABファイルで指定されたディレクトリへインストールする |
/pid | ??? |
/noui | UIを表示しない |
/pbar | /noui指定時でもプログレスバーだけは表示する |
/nouninstall | アンインストール情報を生成しない |