Windows Vista 64bitの一斉環境設定をインストーラで行う

非AD、ドメイン環境下の数十台の64bit Windows Vistaマシンに一斉に環境構築することになったのだが、結構はまったのでメモっておくことにする。

やろうとしたこと

  • ユーザを追加し、そのユーザ用のログオンスクリプト(batファイル)を設置する(を数十台分)

方針

  • 自動設定用のプログラム(スクリプト)を用意し、それUSBメモリに入れて各マシンごとに走らせる(これを複数人で並列に行う)

はまったところ1: UACで権限昇格すると、カレントフォルダが%systemroot%に変わってしまう

batファイルは別のファイルにしてそれをコピーさせようとしたのだが、権限昇格すると1.によりカレントフォルダが変わってしまう。スクリプト側で決め打ちしようにもUSBメモリのドライブレターが変わってしまう恐れがあるので、結局

  • インストーラを作る

ことでそれを解決させた。たまたま手元にVS2005があったからよかったものの、インストーラ作成ソフトがない場合はどうすればいいのだろうか。

Windowsインストーラ

実際使ったのは初めてなのだが、

  • RPMみたいにpost-install, pre-uninstallスクリプトを走らせられるので、ユーザ追加/削除もこれに行わせることが出来る。
  • ショートカットは直接インストール出来ないが、先述のスクリプトを走らせてしまえばショートカット作成もさせられる。
  • スクリプトを使わず直接インストールしたファイルについてはアンインストールが簡単。

なおWindows Vistaの場合インストーラをUACで権限昇格させても、そのままではこれらのスクリプトは昇格前の権限で実行されてしまうので

The Backyard – Vista用ASR作成メモ

に書かれているように、CustomAction内のスクリプトのTypeに0x800(10進だと2048)追加する。リンク先ではWiRunSQL.vbsを使っているが、今回はWindows SDK 6.0内のOrcaというMSI編集ツールを使った(GUIなので自動化できないがやっていることは同じ)。

はまったところ2: 32bitアプリと64bitアプリからでは同じパスでも見える場所が違う

インストーラを作成し手元の環境(32bit)での動作確認をしたのだが、本番環境(64bit)に持って行くとログオンスクリプトのインストールされる場所が C:\Windows\System32\Repl\Import\Scripts から C:\Windows\SysWOW64\Repl\Import\Scripts に変わっている。調べてみると、どうもこれが該当するらしい。

64 ビット版の Windows Server 2003 と Windows XP での 32 ビット プログラムの互換性について

つまりインストーラを32bitで作ったため、

  • C:\Program FilesはC:\Program Files (x86)に
  • C:\Windows\System32はC:\Windows\SysWOW64に

とOSのレベルで勝手に書き換えられてしまうらしい。ログオンは当然64bitで行われるわけだから、SysWOW64上のスクリプトは見に行ってくれないわけだ。とりあえずインストーラのアーキテクチャをx64に、ターゲットを[SystemFolder]から[System64Folder]にすることで、問題は一応の解決をみたわけだが、正直この仕様にした理由はユーザをなめてる&自分たちの首を絞めてるようにしか見えないのだが…。

カテゴリー: Windows. Windows Vista 64bitの一斉環境設定をインストーラで行う はコメントを受け付けていません。
%d人のブロガーが「いいね」をつけました。