Welcome to MSDN Blogs Sign in | Join | Help

Windows 7 強制再起動後の Black Screen

最近奇妙な現象に遭遇しています。 英語版 Windows 7 では発生した経験はないのですが、日本語版 Windows 7 を使っていてやもうえず、強制電源オフなどが必要になった場合や、ブルースクリーンになった後に通常起動を行うと、若干ログイン画面までが遅く、ログイン自体が非常に遅く、その後出てくる画面は黒い画面(Black Screen) です。
(ドメイン環境の PC なので必ずログイン画面が出てきますが、ドメインに入っておらず、ローカル アカウントのパスワードが設定されていなければそのまま黒い画面になると思います)

CTRL + SHIFT + ESC でタスクマネージャーが開くのですが、Explorer は起動していませんし、起動しようとしても固まります。 CMD もだめですね。 下記画面のような感じです。 使用メモリも極端に少なく、サービスもほんの少ししか起動していませんので、明らかにおかしいです。

TS3O0001

この状態だとなにもできませんし、再起動して通常起動しても同じなので、セーフモードで起動してイベントログを見てみると、Ancillary Function Driver for Winsock サービスが起動せずにネットワーク系サービスがすべて起動せずに遅くなってしまっていたようで、結果黒い画面になっているように見えます。

回避方法は簡単で、一度セーフモードで立ち上げて、その後通常起動すれば問題なく起動します。

image

この内容から、最初はこの機種特有の現象で、ネットワークデバイス依存なのかなと思っていたのですが、つい先日 Windows Virtual PC 上で動かしていた 日本語版 Windows 7 32 bit 版で発生しました。 となると、デバイス依存の可能性は低く、実機も 仮想 OS も同じ、日本語版 Windows 7 32bit 版です。

 

これは、なにか関連性があるのかなと思って調べてみたところ、該当しそうなのがあったのですが、、、

KB974719 コンピューターを強制的にシャットダウンした後、Windows 7 を実行しているコンピューターが起動しない

該当条件の 3 つのうちの 1 つに 32 bit 版の Windows 7 で、言語が DBCS というのがあり、これに該当しています。 日本語版 Windows 7 を使っている人のほとんどが経験するであろう現象だと思いますので、それだともう少し問い合わせも多いのでは?と思い、もう少し詳しく調べてみたところ、この 3 つの条件は or ではなく、and 条件ですね。 となると DEP はオンになっていますし、休止状態を電源ボタンやハイブリッド スリープは使っていないので、外れです。。。

英語版の KB の方では、KB974431 に含まれているという記述になっています。 974431 はすでにインストールしてありますし、それでも発生しているので。。。

 

次に視点を変えて調べてみると、内容的には、Vista のときの KB960014

Some services occasionally do not start if you repeatedly restart a computer that runs Windows Vista or Windows Server 2008

がイベントログと合致します。 でもこれは修正モジュールが作られているぐらいなので、時期的にも Windows 7 で吸収されていると思うし。。。

という訳で、解決できているわけではないのですが、現象自体は簡単に直るので同じ症状に陥った人がいたら、参考になればと思います。

Windows 7 の System Image Backup の Detail

その後、System Image Backup について調べていたところ、開発部門が Blog で詳細を記述しているのを見つけました。

Learn more about system image backup

http://blogs.technet.com/filecab/archive/2009/10/31/learn-more-about-system-image-backup.aspx

 

System Image Backup は VHD が作られますが、初回はドライブ全体をスキャンして、データが含まれているブロックを vhd ファイルに入れるようで、実際の HDD の確保領域よりもデータ量が少ないと、その分小さいサイズで出来上がることがわかります。

2 回目以降は追加および変更がかかったブロックの vhd を更新して、同じブロックの古いデータは Volume Shadow Copy 領域に(システム復元用の復元ポイントを保存している場所と同じですね)移動されます。 これによりバックアップを高速にしているのと、vhd そのものは常に最新の状態に保てるので、不意なシステム障害等で新規ドライブへの変更が発生したときにも対応できるというわけですね。

また、Volume Shadow Copy 領域に古いブロックが残っている場合には、古いバックアップからの復元もできるという感じです。

読み進んでいくと(Support for multiple images セクション)、この Volume Shadow Copy を使ったブロック毎のアップデートは、ハードディスクでなおかつ、Volume Shadow Copy をサポートしている事が前提のようで、ネットワークシェアや、メディアなどへのバックアップの場合には、Shadow Copy がサポートされないので、VHD が毎回作成しなおされて、古い VHD と置き換えるという動作になるようです。

私は自宅 PC を NAS に対してバックアップを行っていたのですが、毎回かなり時間がかかるのはこのためですね。。。

 

少し戻って(Do not store the image on a dynamic disk)、ダイナミックディスクの注意点も見逃せないですね。 「ダイナミックディスクにはバックアップを入れないように」から始まっていますが、復元時の機能が制限されるようで、復元時に元のディスクのパーティション構成が変更されていない事が前提になるようです。 そのため、ハードディスクが壊れたりして、新しいハードディスクを買ってきた場合には、バックアップイメージから復元できないという事になります。

知らなくてやってしまう人はいるのかな?? ハード障害の時にもっとも効果を発揮する機能が使えなくなってしまうということなので。。。ほんと注意ですね。

 

で、話は復元の部分に進んできます。  Create a new image after a disk layout change ではバックアップが取られた時点のパーティション構成と、復元しようとしている時点のパーティション構成が違う場合に、パーティションをすべて開放して、フォーマットしてバックアップが取られた時点のパーティション構成と同じ状態に再構成するので、ディスクのパーティション構成を変えたら新しくバックアップを取ってねという事です。

まぁ当たり前といえば当たり前なのですが、つまりは復元時に任意のパーティションを選んで復元する事はできない事を意味します。 フルオート復元のみ可能ということですね。

 

次に、複数のマシン環境や、デュアルブート環境の注意です。 Use different computer names ではバックアップで取られるシステムイメージは、コンピューター名によって識別されているので、2 台で同じコンピューター名を使っている場合があったりすると、1 台目がバックアップを取った後に、2 台目が同じバックアップ場所にバックアップを行うと、1 台目のバックアップが失われてしまうという事が書かれています。

この場合の可能性としては、Windows Vista でバックアップを取っていて、Windows 7 にインプレースアップグレードを行った場合には、Vista も 7 も同じコンピュータ名になっているので、同じバックアップ場所にバックアップを行うと、Vista バックアップイメージは失われてしまうと。。。

最後が XP とのデュアルブートの注意点ですが、これは有名な話ですね。 下記 KB としても公開されています。

復元ポイントもは表示、以前の Windows オペレーティング システムと組み合わせて、デュアル ブート構成で Windows Vista、Windows 7 または Windows Server 2008 ベースのオペレーティング システムを使用します。

 

このチームの人たちは、Tech Net のフォーラムでも活動しているようなので、わからないことがあればこのフォーラムを利用するのがよいみたいですね。

Windows 7 の System Image Backup を利用して、パーティション変更をしちゃおう

私の個人用ノート PC はメモリが 4GB なのですが、もともと Vista の 32 ビット版が入っていたこともあり、Windows 7 の 32 ビット版へインプレースアップグレードを行って使っていました(RC 以前は別パーティションで、RTM したのでアップグレードしました)。  というのもメーカーが 64 ビット版のドライバをサイトに載せてないので、探してくるのが面倒だったためですが・・・

先週末に各所からドラバをかき集めて、Windows 7 64 ビットがまともに動くようになりました。 しかし、もともとテスト用にデータで使っていたパーティションを縮小して、40GB 確保した領域に入れていた事もあり、かなり窮屈です。

image

データ領域をバックアップして開放し、後ろの x64 領域を拡張できるか試してみましたが、やっぱりだめですね。 案の定拡張できるのは後ろの方向のみです。 x64 がちゃんと動いているので、x64 をメインとして、x86 は VHD ブートか別パーティションで念のため残すだけにとどめようと思います(積極的に使わない)。

#本当は SSD 購入したときにやろうと思っていたのですが、Trim ファームウェアがまだだったり、在庫がなかったりともう少し待つしかなさそうなので、とりあえず HDD でパーティション変更を行いたいと思います。

 

変更後のプラン

システムパーティション: 300MB (ブートローダーと BitLocker をオンにしたときに WinRE が入れる大きさを確保します)

ブートパーティション: 77GB (x64 の Windows 7 システムを入れ、x86 は VHD の状態で入れられるとよいのですが・・・)

フリーパーティション: 200GB ほど

OEM パーティション: 変更なし

SSD は 80 GB をターゲットに考えているので、まずはこれで容量的に大丈夫かどうかを HDD 上に設定しようと思います。

 

手順

注意: 始める前に EFS で暗号化してあるフォルダがある場合意は、WinRE 上の Robocopy で必ず失敗しますので、暗号化を解除しておきましょう(または /EFSRAW オプションを忘れずにつける事)。

1. システムイメージバックでシステムイメージをバックアップします。

2. Windows 7 のインストールディスクなどから、システム回復オプションを起動します。

3. コマンドプロンプト を開きます。

diskpart" と入力し、diskpart を起動します。

select disk 0 と入力し、0 番目の内臓ディスク を選択します。

list partition と入力すると、パーティションの情報が表示されます。 この例では、

Partition 1 Primary 40 GB

Partition 0 Extended 250 GB

Partition 3 Logical 41 GB

Partition 2 OEM 8001 MB

パーティションの番号はばらばらですが、すべてオフセット順に並んでします。

最初の 3 つのパーティションを次のコマンドで順に削除していきます。

select partition 1

delete partition

select partition 3

delete partition

select partition 0

delete partition

これで、Partition 2 だけが残りました。

次はパーティションの作成を次のコマンドで順にしていきます。

create partition primary size=300

format fs=ntfs label=”boot” quick

active

assign letter = s:

create partition primary size=79700

format fs=ntfs label=”Windows 7” quick

assign letter = h:

ここでは、便宜上新しい Windows 7 用領域を h: とします。

ここで、list partition を行うと次のようになっています。

Partition 1 primary 300MB

Partition 3 primary 77GB

Partition 2 OEM 8001MB

システムイメージバックアップで取得したイメージは VHD になっていますので、それをアタッチします。 下記ではわかりやすく Win7x64.vhd としています(G: は外付け USB HDD です)。

select vdisk file=G:\Win7x64.vhd

attach vdisk

select partition 1

assign letter=i:

これで VHD のアタッチが成功しました。 ここではアタッチした VHD の\中身は i: としています。

ここで気がつかれた方もいると思いますが、これができるのは Winodws 7 の WinRE からで、Vista の時にはできなかったんですね。。。なので、Complete PC バックアップで取得した内容と HDD のサイズが違っている場合には、手動でも戻す手段がなかったのですが、VHD のアタッチができるので手動復元もできるようになったわけです。

exit と入力して、diskpart を終わります。

robocopy i:\ h:\ *.* /E COPYALL /R:1 /W:1 と入力して、ファイルのコピーを開始します。 途中休止ファイルや、Junction 設定などはアクセスできずに無視されますが、そのままコピーが続行されます。

ここが結構時間がかかります(このときコマンドプロンプトを最小化しておくと、画面描写の負荷が少なくなるので少し早くなりますが、もっと早くしたければ /LOG を使って画面に進捗を表示しないようにしてください)。

コピーが終了したら、次のコマンドでブートエントリを s: ドライブ に作成します。

bcdboot h:\windows /s s:

4. システム回復オプションの画面から、[Restart] を押して再起動します。

再起動で Windows 7 が起動してきますので、パーティション情報を見てみると

image

と、予定通りの構成になっている事がわかります。 この時点で予定していたシステムイメージからのパーティション変更自体は成功ですが、いくつか問題があるので修正していきます。

5. 起動したら管理者モードでコマンドプロンプトを開きます

JUNCTION がディレクトリに変わってしまっているので、次のコマンドで直していきます。

(robocopy の段階で /XJ オプションを設定している場合は、JUNCTION フォルダはコピーされないので、その場合は作り直すだけで OK です)

attrib –s –h –r “Documents and Settings”

rd “Documents and Settings”

mklink /j “Documents and Settings” C:\users

cd c:\users

rd “All Users”

mklink /d “All Users” c:\ProgramData

rd “Default User”

mklink /j “Default User” c:\users\default

次は個々のユーザーの JUNCTION 設定を元に戻すので、cd c:\users\ユーザー名 (ユーザー名の部分) で入って、今までと同じように次のフォルダの結びつけを直します。 通常だと、default ユーザーと現在ログインしているユーザーの 2 箇所になります

<JUNCTION>     Application Data [C:\Users\yukinork\AppData\Roaming]

<JUNCTION>     Cookies [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\Cookies]

<JUNCTION>     Local Settings [C:\Users\yukinork\AppData\Local]

<JUNCTION>     My Documents [C:\Users\yukinork\Documents]

<JUNCTION>     NetHood [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\Network Shortcuts]

<JUNCTION>     PrintHood [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\Printer Shortcuts]

<JUNCTION>     Recent [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\Recent]

<JUNCTION>     SendTo [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\SendTo]

<JUNCTION>     Start Menu [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\Start Menu]

<JUNCTION>     Templates [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\Templates]

次は、C:\Users\ユーザー名\AppData\Local  です。ここも default と 通常ユーザーの 2 つですね。

<JUNCTION>     Application Data [C:\Users\Default\AppData\Local]

<JUNCTION>     History [C:\Users\Default\AppData\Local\Microsoft\Windows\History]

<JUNCTION>     Temporary Internet Files [C:\Users\Default\AppData\Local\Microsoft\Windows\Temporary Internet Files]

次は、C:\Users\ユーザー名\Documents  です。ここも default と 通常ユーザーの 2 つですね。

<JUNCTION>     My Music [C:\Users\Default\Music]

<JUNCTION>     My Pictures [C:\Users\Default\Pictures]

<JUNCTION>     My Videos [C:\Users\Default\Videos]

次は、C:\Users\Public\Documents です。

<JUNCTION>     My Music [C:\Users\Public\Music]

<JUNCTION>     My Pictures [C:\Users\Public\Pictures]

<JUNCTION>     My Videos [C:\Users\Public\Videos]

次は、C:\ProgramData の中です。

<JUNCTION>     Application Data [C:\ProgramData]

<JUNCTION>     Desktop [C:\Users\Public\Desktop]

<JUNCTION>     Documents [C:\Users\Public\Documents]

<JUNCTION>     Favorites [C:\Users\Public\Favorites]

<JUNCTION>     Start Menu [C:\ProgramData\Microsoft\Windows\Start Menu]

<JUNCTION>     Templates [C:\ProgramData\Microsoft\Windows\Templates]

以上を直せば、完了です。

まぁ、アプリケーションの互換性のために用意されているので、Windows 7 完全対応アプリケーションだけ使っている分には大丈夫だとは思いますが・・・

次に、システム回復オプションを使えるように復活させるので、次のコマンドを入力します。

reagentc /disable

reagentc /enable

これで F8 キーを押したときにちゃんとシステム回復オプションが出てきます。

以上、移行は完了です。

 

ここから先は 物理 HDD 環境から VHD に入った Windows イメージが起動できるかどうかの実験です。

1. システムイメージバックアップから C ドライブに入っていたOS の VHD をローカルにコピーする

x86 の環境は VHD ブートで使おうと思っているので、システムイメージバックアップからコピーします(どれかわからなければアタッチすれば中身が見れますので確認できると思います)。

わかりやすく、Win7x86Boot.vhd とでもしておきます。

2. Bcdedit でブート構成を追加する

管理者権限で、コマンドプロンプトを開いて次のように入力します。

bcdedit /copy {default} /d "Windows 7 x86"

そうすると、エントリが作られて次のように GUID が振られます

The entry was successfully copied to {775954ed-d3cc-11de-9ab2-d439092c81ca}

後は、この GUID を使って登録していきます。

bcdedit /set {775954ed-d3cc-11de-9ab2-d439092c81ca} device vhd=[C:]\Win7x86Boot.vhd

bcdedit /set {775954ed-d3cc-11de-9ab2-d439092c81ca} osdevice vhd=[C:]\Win7x86Boot.vhd

bcdedit /set {775954ed-d3cc-11de-9ab2-d439092c81ca} detecthal on

3. 再起動して、”Windows 7 x86” を選択する

。。。。。起動アニメーションの後にブルースクリーンです。。。 メッセージをみると十分なスペースがないので、VHD が展開できないとの事。

x64で戻って空き容量を見てみると、17GB。 で、起動しようとした VHD は 19 GB。。。 まずは空き容量を増やす必要がありそうです。 うーん、80GB ぴったりにするために後 2GB 増やしてもたいして変わらないので、120GB の SSD を購入すると仮定して、41GB ほど増やすことにします。 こういうときは後ろに空き容量があると便利ですね、さくっと拡張完了です。

image

これでもう一度やってみます。

再起動。。。

今度はうまくいきました。ログイン画面が出てきます。

しかし、問題発生です。。。。

今度は、デバイス構成が変わったと認識されたのか、This copy of Windows is not genuine が出てきてしまいました。 Explorer も起動してこないし。。。 CTRL+SHIFT+ESC でタスクマネージャーは起動しますが、様子がおかしいですね。 Explorer を強制起動しても、コンパネも開かない。。。  どうやらこのまま VHD 起動は無理なようです。

ものは試しで、物理パーティションへの復元の方法に切り替えます。

 

せっかく拡張しましたが、もう一度小さくして、後ろの 40 GB のパーティションを作ります。 やはり トータル 120 GB で収まるサイズで考えています(x86 を切り捨てれば 80GB で OK)。

image

WinRE で起動して、VHD をアタッチして行うのははじめの方法と同じです。

今回 robocopy のスイッチに /XJ を指定して JUNCTION ポイントを無視するようにし、高速化でログファイルを使うようにし、マルチスレッド設定を行ってみました。 追加したオプションは /XJ /MT:2 /LOG:e:\copyresult.log (この例では e ドライブにログファイルを作っています)です。

結果は。。。。。うーん、直接 HDD へ展開しても VHD で起動したときと同じ現象になります。。。 Explorer が起動せずに、右下に This copy of Windows is not genuine です。

VHD ブートで使った VHD は、システムイメージバックアップからコピーしたもので、バックアップには手を加えていなかったのですが、バックアップのVHD からファイルをコピーしても x64 のようにうまくいきません。 バックアップした時点で壊れていたのか、x86 はブートローダーと同じパーティションだったのが何か関係あるのか、Vista 32 ビット版からのアップグレードだったのが関係あるのか。。。

というわけで、見事に撃沈です。

まぁ目的の x64 をメインにできたのでよかったのと、すでに x86 環境のデータは Windows 転送ツールで吸い上げて、x64 環境上の Windows Virtual PC の仮想 OS として Windows 7 x86 を動かして、そのゲスト環境に Windows 転送ツールでデータの適用を行っていたので、影響は軽微なのですが、システムイメージバックアップでうまく復元(手動でも)できなかった場合に、データだけでも簡単にリカバリーしたいという人がいると思うので、その点だけ触れておきたいと思います。

 

システムイメージバックアップからデータを取り出す

Windows 7 では VHD のアタッチ(接続) ができるので、それほど困りはしないのですが、探してきてファイルコピーするのはやはり面倒ということで、自動的にファイルや設定を吸い上げたいと思います。 必要なものは Windows 自動インストールキット (WAIK) の中に入っている、USMT 4.0 です。

Windows.old フォルダからの情報を吸い上げて適用したい場合には、USMT 4.0 がお勧めです

でも書きましたが、USMT 4.0 はオフライン OS からのデータ取得をサポートしているので、これを使っていきます。

i: ドライブに VHD をアタッチしたとして、e:\Mig にデータを吸い上げていきます。 EFS ファイルは暗号化されたままの状態で吸い上げます。

 

scanstate e:\mig /auto /offlineWinDir:i:\Windows /efs:copyraw /c

 

# WinRE 環境だと Temporary 領域が最低 250 MB 必要とか出てきて、続行できない場合があるので、そのときは環境変数の TEMP と TMP を空き容量の大きな場所へ変更して試してみてください(それでうまくいきました)。

後は、Windows 7 を入れなおして、その後管理者権限のコマンドプロンプトで、

 

loadstate e:\migs /auto  /lae /lac /c

 

で復元すれば OK です。

 

あとがき

全体を通して VHD のアタッチができるようになった事で、バックアップを取ったけどそれが失敗しているとか、HDD が壊れて新しい HDD に入れ替えたら復元できないとか、Vista の時にはほぼお手上げ状態だった事が手動でいろいろできるようになっているのは、非常に頼もしいですね。

今回は x86 環境の復元には失敗してしまったので、データ収集しかできませんでしたが・・・・。 それでもオフラインデータ収集ができるようになっただけでも朗報ですよね。

注意: 行っていてわかったのですが、システム回復オプションのディスクは、x86 と x64 で違い、x86 で起動すると x64 パーティションを認識してくれません。 なので、x64 にしたら、Windows 7 の 64 ビット版のインストールディスクから システム回復オプションを起動するか、システム修復ディスクの作り直しを忘れないようにしてください。

Windows 7 もうひとつのインストール方法

Windows 7 のインストールでどうやらファイルの展開中にフリーズしてしまうケースがあるようです。 こういった場合は HDD の不良か、DVD の不良かと考えるのですが、手動でファイルの展開をしてしまえばもっとはっきりするのではないかと考えました。 そうです、ImageX の Apply オプションを使って直接ハードディスクに展開してしまおうと言うわけです。 通常のセットアッププロセスを飛ばして Apply するので、アップグレード版などの場合、ちゃんと既存 OS の認識をしてくれてプロダクトキーが通るかどうかは不明ですが、少なくとも install.wim が正しく展開できるかどうかは確認できるはず。

 

[すでに Vista がインストールされている場合を想定]

補足: Windows Pre-install environment (Win PE) に ImageX と Install.wim を入れたディスクなり、USB メモリースティックが用意できれば、Win PE で起動して、既存 OS なしで、 Install.wim を直接展開もできます(通常版ならプロダクトキーも通ります)が、Win PE を準備して、そこに Install.wim と imageX を入れて、ISO 等を作成するというのは結構な手間なので省略します^^;

 

[準備するもの]

Windows 自動インストールキット (WAIK) - この中に Image X がありますので、ダウンロードして Vista にインストールしておきます。

Windows 7 DVD - この中の Install.wim を展開適用します。 Vista を起動して、DVD ドライブに挿入しておきます(D ドライブと仮定します)。

空きパーティション(ディスクの縮小とかで開けられます)か、別の HDD を接続し、Windows 7 をインストールできる領域を用意します(E ドライブと仮定します)。

 

[手順]

1.  Deployment ツールのコマンドプロンプトを管理者権限で開きます

image

次のようなコマンドプロンプトが開きます。

image

 

2. ImageX /info d:\sources\install.wim を実行して含まれているイメージを確認します

image

販売されているパッケージでは 5 つのイメージが含まれており、次のようになっています。

1 = Starter

2 = Home Basic

3 = Home Premium

4 = Professional

5 = Ultimate

購入したパッケージに含まれているプロダクト キーはそのエディション専用になりますので、購入されたパッケージと同じエディションを選択する必要があるので、番号を覚えておきます。

(ここでは Ultimate と仮定します)

 

3. E ドライブに対して、次のコマンドを使用してイメージを展開します。

imagex /apply d:\sources\install.wim 5 e:\

image

これが 100% になれば完了です。 DVD に問題があるか、HDD に問題がある場合にはここで止まるか、エラーになるはずです。

この作業が、通常セットアップの [ファイルを展開しています] に該当します。

大体 10 分ほどで展開が終わります(HDD の書き込みが遅いともう少しかかるかもしれません)。

次のように、Successfully applied image. と表示されれば完了です(この例では 5 分 41秒で終わりました)。

image

 

4.  Windows 7 を起動できるようにする

このままでは、Windows 7 は起動してきませんので、ブートローダーを置き換えて、Windows 7 が起動できるようにします。

E:\Windows\System32 に移動し、bcdboot e:\Windows /s c: と入力します。

image

 

5. 再起動します

再起動後、ブートメニューから “Windows 7” を選ぶと、次のようにインストールの処理が行われます。

順を追ってスクリーンショットを入れておきたいのですが、容量の関係で表示される言葉記述しますので、参考にしてみてください。

a. サービスを開始しています

image

b. デバイスのインストール中(XX %) と % が増加していきます

c. システム設定の適用中

d. コンピューターを再起動した後、セットアップを続行します

再起動後がここで行われます

e. 初めてコンピューターを使用するための準備をしています

image

f. ここから先は一般的な新規インストール後と同じ画面です。

image

 

次のように起動すれば、インストールの完了です

image

 

以上、このように直接 HDD へイメージを展開してしまうやり方でもインストールができますので、どうしても通常の方法でうまくいかないときには試してみるとよいでしょう。

MS Store での Windows 7 ダウンロード購入 (3)

インストール準備編

さて、3 つの EXE がダウンロードできましたので、準備を始めます。

 

1.MS Storeから EXE 版のダウンロードファイル下記 3 つのファイルを同じディレクトリに保存します(32 bit 版の例)

Win7-U-Retail-ja-jp-x86.exe

Setup1.box

Setup2.box

 

2.Win7-U-Retail-ja-jp-x86.exe を実行します。

clip_image002

3.expandedSetupフォルダが作成され、セットアップファイルが展開されます。

clip_image004

4.展開が終了すると、自動的にセットアップ画面が立ち上がります。後は、一般的なインストールの手順と同じです。

clip_image006

※補足:Install.wim、boot.wimはexpandedsetup\sourcesディレクトリ内に保存されます。

clip_image008

 

 

ここで、発生するであろうエラーをあげて起きます

3 つのファイルがダウンロードできておらず、setup1.box がない場合

clip_image002[6]

 

展開先のディレクトリに Boot.wim が存在しない場合

clip_image002[8]

 

展開先のディレクトリに Install.wim が存在しない場合

clip_image002[10]

 

Boot.wim が破損・正しいファイルでない場合

clip_image002[12]

MS Store での Windows 7 ダウンロード購入 (2)

ダウンロード編

一度画面を閉じてしまったと仮定して、購入履歴からダウンロードを行ってみます。

1. https://www.microsoftstore.jp/Form/Order/OrderHistoryList.aspx にアクセスします。

2.  [マイアカウント] をクリックします

clip_image002

3. 注文履歴の画面になります。 赤い四角の部分にプロダクトキーが表示されています。

image

4. ドロップダウン リストボックスから、目的のファイルを選択します。

image

<<注意>>

1/3、2/3、3/3 の表記がある EXE は、3つともすべてダウンロードする必要があります。 3 つがそろって初めて展開できます。

ISO の場合は1つだけダウンロードすれば OK です。

また、Windows XP 上から Internet Explorer 6 を使ってダウンロードする場合には、2GB の上限に引っかかってしまう場合があるので、Internet Explorer 7 以上を使います。

[XP] 2GB 以上のファイルのダウンロードに失敗します

 

5. 次のように選択し、[ダウンロード] をクリックします(この場合は 1/3 を選んだので残りの、2/3 と 3/3 もダウンロードする必要があります)

image

6. ダウンロードの確認画面がでたら、[保存] をクリックして、ローカルに保存します。

image

この例の場合には、2/3 と 3/3 も同様の手順で繰り返しダウンロードします。

次はインストール準備編

MS Store での Windows 7 ダウンロード購入 (1)

なにやら、MS Store から Windows 7 を購入した人がうまくダウンローを行えないでいるようです。 というわけで、そのコンテンツを作ってしまいましょうというわけです。

購入編

1. まずは欲しい製品をカートに入れます。

clip_image002

2. 個人情報の取り扱いについて確認します。

clip_image002[8]

3. 本人情報を入れます

image

4. 支払い情報を入力します

image

5. 注文内容確認画面

image

6. 注文完了

image

以上で、購入完了です。 赤く塗りつぶしたところにプロダクトキーが表示され、ダウンロードできるようになっています。

次はダウンロード編です。

Windows 7 博覧会(セブン博) の 2F に Windows 7 アップグレード相談コーナーができます

明日、明後日 (10/24, 25) で開催される、セブン博 http://windows7.jp.msn.com/journal/jo01.htm ですが、2F には PC メーカーや周辺機器メーカーからの Windows 7 対応機器が並べられ、さわったり説明を聞いたりと、Windows 7 の世界を体験できる場所が用意されます。

 

また、2F の片隅には Windows 7 アップグレード相談コーナーが設けられますので、そこでアップグレードに関する相談も受けられます。

私もこのアップグレード相談コーナーに両日ともおりますので、お近くの方でアップグレードに不安な方は是非いらしてください。

Windows 7 の Troubleshooting Pack を作ってみよう (4)

テスト環境(作成した環境ではない環境)でテストです。

今回のシナリオでは、 Windows Virtual PC + XP MODE が便利です。 そのまま XP 環境を Windows 7 にアップグレードしてしまえばテストに使えます。

まずは、テスト証明書をテスト環境にインストールします(開発環境で、Cer ファイルにエクスポートしておきます)。

1. Cer ファイルをダブルクリックして、表示して[証明書のインストール]をクリックします。

image

2.  ウィザードに従って進めていきますが、場所を選択するところで、[信頼されたルート証明期間] を選びます。

image 

後は画面に従って完了します。

 

では実行です。 USMT のコピーが終わった後に troubleshooting pack が起動してきました。

image

次へを押して進めると、Windows.old フォルダがあるので、scanstate が動きます。

image

scanstate が問題なく終わると、loadstate が動きます。

image

loadstate が問題なく終わると、usmtutils を使ってマイグレーションストアの削除を行います。 入力を求められるので Y を入力し、Enter を押します。

image

その後は、1分後に再起動です。 見つかった問題も解決済みになっています。

image

再起動後 XPMUser のプロファイルが追加されています。

image

XPMUser でログインすると、デスクトップにはアイコンがあり、ファイルもちゃんとドキュメントに入っています。 テーマが解除されているので、テーマは再設定の必要があります。

image

テーマを再設定すると下記のようになります。

image

今回はレジストリの内容まで確認していませんが、USMT はレジストリの内容まで移行するので、アプリケーションを入れなおせば設定された内容で使えるはずです。

 

テストは問題ないので、後は本番用に実行するパックと EXE にちゃんとしたサインを施せば OK という感じですね。

 

#とりあえずテスト証明書の段階でも試してみたい方は、ファイルを下記に入れておきましたので、どんな感じなのかを確認いただけます。

http://zx9b0w.blu.livefilestore.com/y1pKV38ynqDRYtCMm2soaPp8ln3dai8B-g27H02Fp8PcXJRnn7ezhvlA5T02f0SuJqMKPwxHb3StFmFWUOuPcsI-KLm1PAjH_Oh/GetWinOld.zip?download

Windows 7 の Troubleshooting Pack を作ってみよう (3)

テスト&パッケージ作成

ここのスクリプトのテストは、スクリプトエディタで実行してみることができますが、出来上がったパックを一連で流したい場合には、まずは UI 上から下図のボタンを押して実行する事ができます。

image

実行すると次のような画面が表示され、実際のトラブルシューティングパックとして動作の確認ができます。

image

この操作をすると実際にはパッケージ作成も行われていますので、プロジェクトが保存されているディレクトリの下の Output の下の CAT ディレクトリに、拡張子 .diagcab のファイルが作成されます。

image

これで、トラブルシューターとしては完成なのですが、注意事項があります。

diagcab には証明書によってサインされているのですが、これは下図のようにテスト用のルート証明書が入っている事が前提なので、ほかの環境へ持っていくとこのままでは実行できません。 なので出来上がったパックをちゃんと Deploy するときには正式な証明書によるサインが必要となります。

image

 

今回のシナリオの場合、このままでは WAIK が入っていないと動きません。 使ってもらう人に WAIK をダウンロードしてインストールしてもらえばよいのですが、シナリオ的に Windows.old からのデータ吸い上げを行いたいだけなのに WAIK のインストールはちょっと大変です。

というわけで、USMT を最初にコピーしてしまう処理をを入れたいのですが、単にファイルのコピーなので、バッチファイルで行います。

 

準備

1. InstallUSMT&RUN.bat というファイル名で次の内容を含んだバッチファイルを作成します。

robocopy .\USMT "%LOCALAPPDATA%\Microsoft\Windows AIK\Tools\USMT" *.* /E
"Geathering Data form Windows.old.diagcab"

2. バッチファイルを CAT フォルダに保存します。

3. %ProgramFiles%\Windows AIK\Tools の中にある、USMT のディレクトリごと CAT フォルダにコピーします。

下図のような感じなります

image

4. この 3 つのファイルを 1つの ZIP ファイルにします。

5. WinZip の SelfExtractor を使って、EXE 化と伸張後に installUSMT&RUN.bat を実行するように設定します

4 および 5 はフォルダを丸ごと圧縮&パッケージして、EXE を作って伸張後に installUSMT&RUN.bat が動かせるならどのようなツールでも OK です。

 

これで完成した EXE を対象となる環境で動かせば OK です。

次は実際にテスト環境で動かしてみます。

Windows 7 の Troubleshooting Pack を作ってみよう (2)

スクリプト編です。

(PowerShell スクリプトのスペシャリストではないので、スクリプトの記述に関しては平凡だと思いますので、あらかじめご了承お願いします。)

最初の [Edit Troubleshooter Script] をクリックします。 Windows 7 にはデフォルトで Power Shell 2.0 用のエディタがありますので、これが起動します。

image

一番上の部分にスクリプトを記述して、F5 を押すか、ツールバーの実行ボタンを押すと、真ん中にその結果が表示されます。

一番下の Window は直接コマンドをいれてその様子を見たいときに使います。 結果は同様に真ん中に表示されます。

Troubleshooter Script

ここでのポイントは、

1. Windows.old\Windows フォルダが存在する

2. USMT が使える状態にある

をチェックします。 この条件に合致した場合には、 Root Cause を見つけたことになるので、update-diagrootcause を呼び出して $true を設定するというものです。

今回は WAIK をインストールしているだけではなく、USMT をあらかじめコピーしてから troubleshooting pack を実行する事も考慮して、2 箇所に USMT のフォルダがあるかどうかを調べています。

 

# TroubleshooterScript - This script checks for the presence of a root cause
# Key Cmdlets:
# -- update-diagrootcause flags the status of a root cause and can be used to pass parameters
# -- get-diaginput invokes an interactions and returns the response
# -- write-diagprogress displays a progress string to the user

$RootCauseID = "DataFromXP"

# Your detection Logic Here
$WinOldPath = $env:SystemDrive + "\Windows.old\Windows"
$USMTDir = $env:ProgramFiles + "\Windows AIK\Tools\USMT\" + $env:PROCESSOR_ARCHITECTURE
$USMTDir2 = $env:LOCALAPPDATA + "\Microsoft\Windows AIK\Tools\USMT\" + $env:PROCESSOR_ARCHITECTURE
$WinOld = Get-Item $WinOldPath
$USMT = Get-Item $USMTDir
$USMT2 = Get-Item $USMTDir2

if (!$WinOld) {
    Write-DiagProgress "Windows.old is not found"
    $RootCauseDetected = $false
    update-diagrootcause -id $RootCauseId -detected $RootCauseDetected
    return
} else {
    Write-DiagProgress "Windows.old is found"
}

if (!$USMT -and !$USMT2) {
    Write-DiagProgress "Windows Automated Installation Kit is not instelled. Please, install from http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=696dd665-9f76-4177-a811-39c26d3b3b34"
    $RootCauseDetected = $false
    update-diagrootcause -id $RootCauseId -detected $RootCauseDetected
    return
} else {
    Write-DiagProgress "Windows Automated Installation Kit is instelled or USMT is found."
}

Write-DiagProgress "There is Windows.old folder and Windows AIK is installed. Done for checking"
$RootCauseDetected = $true #Replace "$true" with the result of your detection logic

#The following line notifies Windows Troubleshooting Platform of the status of this root cause
update-diagrootcause -id $RootCauseId -detected $RootCauseDetected

 

Resolver Script

[Edit Resolver Script] をクリックすると、実際に問題を修正するスクリプトの記述となります。

ここでは特に、何かの値を返す必要があるという事はありません。 少し複雑なので、途中に日本語コメントを入れながら色を変えて記述します。

 

# Resolver Script - This script fixes the root cause. It only runs if the Troubleshooter detects the root cause.
# Key cmdlets:
# -- get-diaginput invokes an interactions and returns the response
# -- write-diagprogress displays a progress string to the user

# Your logic to fix the root cause here
$USMTDir = $env:ProgramFiles + "\Windows AIK\Tools\USMT\" + $env:PROCESSOR_ARCHITECTURE
$USMTDir2 = $env:LOCALAPPDATA + "\Microsoft\Windows AIK\Tools\USMT\" + $env:PROCESSOR_ARCHITECTURE
$USMT = Get-Item $USMTDir
$USMT2 = Get-Item $USMTDir2

#ここでは USMT のディレクトリのうち見つかったほうをディレクトリを使うようにしています。

if (!$USMT) {
    $USMTDir = $USMTDir2
}

if(!$USMT -and !$USMT2) {
    return $false
}

#次の Veryfier で Fix ができたかどうかを確認したいのですが、Global 変数でも値の保存ができなかったので、レジストリ上にキーを作ってその存在で判断しています

Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name "GetDataFromWindowsOld"

Write-DiagProgress "Prepartion was done.  Start scanscate for gathering information"

#カレントディレクトリを USMT のディレクトリに変更し、scanstate をパラメータつきで呼び出します。このとき –Wait を指定してプロセスが終了するまで待つ設定です。
Set-Location $USMTDir
Start-Process "scanstate.exe" -Wait -ArgumentList ($env:SystemDrive + "\migs /auto /offlineWinOld:" + $env:SystemDrive + "\windows.old\Windows /hardlink /nocompress /efs:hardlink /c")

#プロセスが終わると、ログファイル scanstate.log が作られるので、これを読み出してエラーが記録されていないかどうかを確認します。 エラーが記録されている場合には処理を中止して戻ります。

$ErrorCheck=""
$ErrorCheck = select-string -path scanstate.log -pattern "Failed.\[gle=0x"
if($ErrorCheck) {
    Write-DiagProgress ("Error has occured :" + (Get-Content scanstate.log))
    return $false
}

#scanstate が正常終了すると、マイグレーションストアが %SystemDrive%\migs に作成されていますので、loadstate をパラメータつきで呼び出して、そこからデータを吸い上げて、動作中の Windows 7 に適用します。 同様に –wait をつけています。

Write-DiagProgress "Start loadstate for applying information in Windows 7"
Start-Process "loadstate.exe" -Wait -ArgumentList ($env:SystemDrive + "\migs /auto /hardlink /nocompress /lae /lac /c")

#同様に loadstate.log を読みこんでエラーチェックを行いますが、ここではすでにマイグレーションストアが作られているので、ストアの削除を行う必要があるので、エラーになったという記録だけを行って、処理を続行します。

$ErrorCheck=""
$ErrorCheck = select-string -path loadstate.log -pattern "Failed.\[gle=0x"
$NoError = $true
if($ErrorCheck) {
    Write-DiagProgress ("Error has occured :" + (Get-Content loadstate.log))
    $NoError = $false
}

#マイグレーション ストア の削除を usmtutils を使って行います。 ここではどうしても、Yes か No の選択がコマンドプロンプトで求められるので、ユーザーに Y を押してもらう必要があります。

Write-DiagProgress "Start usmtutils for deleting migration store. Please, input ""Y"" in command window"
Start-Process "usmtutils.exe" -Wait -ArgumentList ("/rd " + $env:SystemDrive + "\migs")

#次は再起動のための shutdown の呼び出しですが、loadstate でエラーになっていた場合は再起動を行いません。 loadstate まで成功した場合には、レジストリにキーを作成して、shutdown を呼び出して 1分後 に再起動を行います。

if($NoError) {
    Write-DiagProgress "Done and Restart the computer within 60 second"
    New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name "GetDataFromWindowsOld" -PropertyType Binary -Value 1
    Start-Process "Shutdown.exe" -ArgumentList "/r /t 60"
    return $true
} else {
    return $false
}

 

Verifier Script

[Edit Verifier Script]をクリックすると、問題が修正されたかどうかのチェックを行うスクリプトの編集となります。

このスクリプトでは、先の Resolver で最後まで正常にスクリプトが走った場合に作成される、レジストリの値を調べて、存在する場合には、$RootCauseDetected = $false  ということで、update-diagrootcause を呼び出します。

 

# Verifier Script - This script confirms that a root cause has been resolved correctly
# Key Cmdlets:
# -- update-diagrootcause flags the status of a root cause and can be used to pass parameters
# -- get-diaginput invokes an interactions and returns the response
# -- write-diagprogress displays a progress string to the user

$RootCauseID = "DataFromXP"

# Your detection Logic Here
$Flag = Get-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name "GetDataFromWindowsOld" | Select-Object GetDataFromWindowsOld

if(!$Flag) {
    $RootCauseDetected = $true #$false #Replace "$false" with the result of your detection logic
} else {
    $RootCauseDetected = $false #$false #Replace "$false" with the result of your detection logic
}

#The following line notifies Windows Troubleshooting Platform of the status of this root cause
update-diagrootcause -id $RootCauseId -detected $RootCauseDetected

 

ここで気がつかれた方もいらっしゃると思いますが、troubuleshooter で update-diagrootcause に True を設定して、 Verifier で false を設定する事で、Fix が行われたという認識となります。

つまり、troubleshooter では update-diagrootcause が false の場合には Resolver には進みませんし、Verifier で True のままだと問題が修正されていないという認識となります。

 

次はテストとパッケージの作成を行っていきます。

Windows 7 の Troubleshooting Pack を作ってみよう (1)

今回は Windows 7 で実行可能なトラブルシューティング パックを自作してみたいと思います。

まず、Windows 7 の SDK が必要となりますので、これをダウンロードしてインストールします。

インストールが完了すると、下記のように Windows Troubleshooting Pack Designer があるのがわかります。 これを使って作成します。

image

起動した画面

image

ここで、Project メニューから New を選んで作成していくのですが、何の問題に対して修復するのかというシナリオを考えておかないといけません。

そこで今回は、「Windows XP や Windows Vista の環境に Windows 転送ツール等でデータを吸い上げずに、Windows 7 を入れちゃって、Windows.old からデータを吸いあげる」 というシナリオでいきたいと思います。

Root Cause としてはいくつも登録できるのですが、今回は1つだけで行きます。 このシナリオでは Fix のために USMT を使うので、Windows Automated Installation kit  が必要となります。

料理番組のようで申し訳ないですが、すでに出来上がっているプロジェクトが下記です。 実際 New を選んだ後は、ウィザード形式で進めていくので、この画面までは比較的簡単にできます。

image

では順番にそれぞれの内容のスクリーンショットを載せていきます。 下図は Root Cause のメイン画面です。 複数の Root Cause に対しての torubleshooting pack を作る場合には、この Root Cause の項目がたくさん存在することになります。

image

下図はトラブルシューターを動かすときの基本的な設定です。

最初のオプションは管理者モードで実行させる必要があるかどうかです。 今回は USMT のツールを実行するので、ここは必須で管理者モードで実行させる必要があります。

次のオプションはユーザーに質問項目を表示させて、その内容を元に判断する必要があるかというものですが、今回は必要ないので No を選んでいます。

どのような場合に使われているかというと、デフォルトで Windows 7 に入っているトラブルシューターの [プログラムの互換性] で、ユーザーが選ぶ箇所があります。 そういったインターフェースを表示して入力を求めるかどうかですね。

image

下図は Resolver の設定です。 ここでは 3 つのオプションがあるのですが、先の画面と違うのがプロンプトを表示する必要があるかどうかです。 何らかのメッセージを表示する必要があるときは、ここを Yes にしますが、今回のシナリオでは No でいきます。

後の 2 つのオプションは先の画面と同じで、Troubleshooter ですでに管理者権限を要求しているので、ここでは No で OK です。

というのは、 Windows 7 の場合プロセスが一度管理者権限で起動した場合、それ以降はすべて管理者権限として動くので、あえて設定する必要がないのですが、 Troubleshooter で No を設定して、実際の Resolver で管理者権限が必要になるようであれば、ここで Yes を選びます。

image

下図は Verifier の画面です。 問題が Fix されたかどうかを確認する部分です。

これを設定しないと最後のトラブルシューターがちゃんと緑のチェックマークで終わりませんでしたので、最初のオプションは Yes を選び、次のオプションは No を選びます。 残りの 2 つは一番最初の画面と同じです。

image

下図が Scripts の画面です。

上記 3 箇所の設定に相当するスクリプトが下記の 3 つとなり、具体的な 3 つのスクリプトを記述することで、1 つの Root Cause を Fix するトラブルシューティング パックとなります。

image

次は具体的なスクリプトの記述に入っていきます。

次はスクリプトを書いていきます。

XPMODE が RTM しました

2009/9/30 PC メーカー向けに XPMODE が RTM しました。 なので、早速手に入れてセッティングしてみました。 下記は Internet Explorer 6, 7, 8 の画面を同時にだしてスクリーンショットを取ったものです。

IE6.7.8

 

基本となるコンポーネント

  • Windows 7 専用 Virtual PC 事、Windows Virtual PC (KB958559)
  • XPMODE (Windows XP Professional SP3 が入った VHD)

※Windows 7 の Professional 以上では、XPMODE を実行するためのライセンスが付属しますので、XP 環境を用意するには XPMODE が一番楽ですが、Windows XP Professional 版の正規ライセンスユーザーであれば、Windows 7 Home Premium でも 自分で、Virtual PC 上に Windows XP をインストールして、Service Pack 3 まで当てる事で、同じ環境を作り出すことが可能です。

 

一般的に書かれている事を書いても面白くないので、自分で仮想 OS をインストールする場合についての注意点を記述したいと思います。

上記のような画面にするには、RemoteApp のコンポーネントが必要です。 RemoteApp 自体は Windows Server 2008 のターミナルサービスの新機能として取り入れられたものです。 Windows Virtual PC では統合コンポーネントを入れて、RemoteApp コンポーネントを入れることで、Windows Server 2008 の RemoteApp と同様にウィンドウだけを表示することができるというものです。

統合コンポーネントをインストールできる OS とサービスパック

Windows XP SP3

Windows Vista SP1

Windows 7

 

RemoteApp コンポーネントをインストールできる OS とエディション

Windows XP Professional

Windows Vista Enterprise または Ultimate

(Windows 7 Enterprise または Ultimate: Windows 7 の場合は標準対応ですが、RemoteApp 対応はこの 2 つのエディションのみです)

 

つまり、上記をあわせてフル機能を使うには、次のようになります。

Windows XP Professional SP3  (-> XPMODE の VHD にはこれが入っています)

Windows Vista Enterprise または Ultimate の SP1 以上

Windows 7 Enterprise または Ultimate

 

RemoteApp 用コンポーネントダウンロード先

XP 用: http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=e5433d88-685f-4036-b435-570ff53598cd

Vista 用: http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=26a2de17-8355-4e8d-8f33-9211e48651fb

※この内容を書いているときは v3 ですが、一般リリース時点ではバージョンがあがるかもしれません

 

インストール順番

  1. OS をインストール
  2. サービスパックをインストール (サービスパック込み出ない場合)
  3. 統合コンポーネントをインストール
  4. RemoteApp 用コンポーネントをインストール

 

という訳で、Windows 7 Professional 以上では XPMODE として XP イメージを使えますので、ダウンロードしてインストールした方が楽です。 Vista は上記のようにインストールするしかないですが・・・。

ちなみに、Windows 7 をゲスト OS として動かす場合は、現時点では 2 と 4 は必要ありません。  さらに Windows 7 の場合には、下図のように仮想 OS 内でもエアロが有効になります。 そのため、英語版と日本語版のちょっとしたチェックとかも実環境に近い表示イメージでできます。

IE8EN&JA

 

XPMODE を使えるようにする前準備

PC メーカー向けの XP MODE はいきなりチュートリアルが走って、すぐに使えるようになるものではありませんでした。

単純に VHD が伸張できる EXE になっているだけです。 そのため、インストラクションに沿って、使えるようにしていきます。

  1. Windows XP Mode_en-US.exe を実行して、VHD を C:\WindowsXPMode\ へ伸張します (日本語版は最後が ja-jp です)
  2. 手動で Virtual PC を起動するための設定を行いますので、[仮想マシンの作成] から行います。 名前は "Prep for Windows XP Mode" とでもしておきます。
  3. 仮想ハードディスクを追加する画面で、[既存の仮想ハードディスクを使用する] を選び、1 で伸張した場所にある、Windows XP Mode base.vhd を選び、[作成] ボタンを押して作成します。
  4. "Prep for Windows XP Mode" を起動し、一通り必要な設定を行ったら、出荷可能状態にする必要があります。 注意:この時点では Administrator のパスワードは必ず空(設定しない) にしておくこと。 XPMUser のアカウントは無効で、パスワードは同じく空であること。
  5. パスワードが空の状態の Administrator でログインして(デフォルトのままであればこの状態です)、コマンドプロンプトを起動し、次のコマンドを入力します。
    cd /d c:\sysprep
    sysprep –quiet –mini –reseal
  6. Sysprep ツールが出荷状態にして、VHD をシャットダウンします。

 

XPMODE を展開する

1. 準備ができたので、展開しますといっても同じPC上で使えるようにするだけなので、次のような内容を含むバッチファイルを作って実行します

mkdir "%PROGRAMFILES%\Windows XP Mode"
copy "C:\WindowsXPMode\Windows XP Mode base.vhd" "%PROGRAMFILES%\Windows XP Mode\"
xcopy C:\WindowsXPMode\VXPEULA.txt "%PROGRAMFILES%\Windows XP Mode\"
xcopy C:\WindowsXPMode\Key.txt "%PROGRAMFILES%\Windows XP Mode\"
xcopy C:\WindowsXPMode\Tutorial "%PROGRAMFILES%\Windows XP Mode\Tutorial" /e

2. 次に コピーされた先 %PROGRAMFILES%\Windows XP Mode\ に入っている、Windows XP Mode base.vhd の セキュリティ設定を変更します。

2-1. Administrators に対して次の権限を無効にします

Write data
Append data
Write attributes
Write extended attributes
Delete

2-2 所有者を SYSTEM に変更します(SYSTEM が一覧に出てこない場合には追加します)

 

3. レジストリの設定を行います。  次のような内容を含むバッチファイルを作って実行します。

reg add "HKLM\Software\Microsoft\Windows XP Mode" /v InstallDir /t REG_SZ /d "%PROGRAMFILES%\Windows XP Mode\Windows XP Mode base.vhd"
reg add "HKLM\Software\Microsoft\Windows XP Mode" /v TutorialPath /t REG_SZ /d "%PROGRAMFILES%\Windows XP Mode\Tutorial\VXPTutorial.html"
reg add "HKLM\Software\Microsoft\Windows XP Mode\XPM Custom Configuration\Default Options" /v "ui_options/seconds_to_save" /t REG_DWORD /d 60

最後のレジストリは 起動しているアプリケーションを終了させたときに、どれくらいの時間後ろで動いている仮想環境を起動しておくのかの設定で、私は 60 秒 にしました。 つまり、たとえば Internet Explorer 6 を愁傷させて、すぐに起動しなおす分には仮想環境が残っていますが、1 分経過すると仮想環境を終了させるというわけです。

 

XPMODE を使える状態にする

スタートメニューの Windows Virtual PC の下に表示されている、Windows XP Mode をクリックします。 すると、今までと同じようにチュートリアルが走って、XPMUser へのパスワードへの設定などを行って使えるようになります。

同じPCで使う場合、最初に作った "Prep for Windows XP Mode" は削除して大丈夫です。

 

というわけで、この方法を使えば企業展開などでも、どうしても XP でしか動かないアプリケーションがある場合など、あらかじめ XPMODE 上にインストールした状態で展開ができそうですね。 要は上記の "XPMODE を展開する" まで行った時点で、ImageX で Windows 7 ごと WIM にしてそれを利用してインストールすればよい気がします(試してはいませんのであしからず)

フォーラム メンテナンスのお知らせ 2009 年 4 月 17 日(金) AM 10:00 ~

フォーラムオペレータ大久保です。いつも同じ内容ですみません。

2009 年 4 月 17 日(金曜) AM 10:00 より、フォーラム システムのメンテナンスが行われます。
ダウンタイムは発生しない見込みですが、一時的に接続できない等の現象が発生する可能性がございます。
この場合は少々時間をおいてのアクセスをお試しください。

ご利用の皆様にはご不便をおかけいたしますが、なにとぞご理解くださいますようお願いします。
Posted by Naomi Ohkubo | 0 Comments
Filed under:

【日本語版】 Visual Studio 2005 および Visual Studio 2008 のウィザードでポップ アップ スクリプト エラーが出る

 

こんにちは!

フォーラム オペレーターの服部清次です。

ここ最近、どういう訳か肌寒い日が続いていますが、皆さんはお元気ですか?

僕は、冬服をしまったばかりのタイミングでしたので、ちょっとビックリしています。 (^^;)

桜の開花も遅れているようですが、、、今週末は期待していいのでしょうか・・・

 

さて、今日は、アメリカの Visual C++ チームのブログに掲載されている Internet Explorer 8  関連のニュースを紹介してみようと思います。

こちらは、アメリカ現地時間の328日(土)に公開されたスレッドですので、かなり新しい情報です。

ぜひご一読ください!

 

* なお、日本語に翻訳するうえで表現のニュアンスを変えている箇所などがありますので、ご了承ください。

 

 

Visual Studio 2005 および Visual Studio 2008 のウィザードでポップアップ スクリプト エラーが出る。(原題: Some VS2005 and VS2008 Wizards Pop Up Script Error.

 

Visual C++ チームは、現行リリースされている Internet Explorer (Internet Explorer 8) のインストール後に、いくつかの VC++ ウィザードが正常に機能しなくなるということを発見しました。 この影響を受ける製品は、Visual Studio 2005 Visual Studio 2008 で、以下のウィザードが影響を受けます。

l  関数の追加

l  変数の追加

l  スマート デバイス新規プロジェクト作成

l  スマート デバイスクラスの追加

 

IE8 がインストールされているマシン上の Visual Studio 2005 および Visual studio 2008で、上記のいずれかのウィザードを起動すると、ポップアップ スクリプト エラーが出ます。 このエラーに遭遇された方のために、回避策があります。

 

以下の手順に従ってください。

l  regedit を開く(64 ビット OS では、32 ビットの regedit を開いてください。) 

l  以下のレジストリ キー内に(まだ存在しない場合は)1000 という名前の新しいキーを作成してください。

    “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones”

l  以下の内容で、作成したキーに DWORD 値を入力します。

o   名前 = 1207

o   種類 = REG_DWORD

o   データ = 0x000000

 

なお、この回避策を Visual Studio 2005 で行なうには、Visual Studio 2005 SP1 (および Windows Vista Visual Studio 2005 SP1 アップデート)がインストールされている必要があります。

 

以下は、この問題とその回避策の簡単な説明になります:

VC++ ウィザード エンジンは、IInternetSecurityManager インターフェイスを実装しています。 この実装では、Internet Explorer が問い合わせを行なうポリシーに基づいて特定のアクションを許可または却下します。 IE8 では、カスタム セキュリティ マネージャもまた、URLACTION_ACTIVEX_OVERRIDE_REPURPOSEDETECTION ポリシーに基づいて特定のアクションを許可または却下します。 以前の Internet Explorer では、このVC++ ウィザード エンジンが iexplore.exe プロセスの中で動作していない場合、カスタムセキュリティ マネージャにはデリゲートされませんでした。 VC++ ウィザードのカスタム ゾーンにはこのアクションに対するポリシーが存在しないため、Internet Explorer エンジンは、このアクションに失敗します。 私たちは現在、IE8 におけるこの変更が仕様であるかどうかを確認している段階で、その結果によって、おそらくウィザードまたは IE コンポーネントの修正プログラムという形で対処する予定です。

 

上記の回避策によって、ポリシー 1207 (URLACTION_ACTIVEX_OVERRIDE_REPURPOSEDETECTION) がゾーン 1000 VC++ ウィザード エンジンのカスタム ゾーン)で許可されます。 これにより、ウィザードコードが意図されたとおり動作します。

 

この問題が原因で、皆さまにご迷惑をお掛けしましたことをお詫び申し上げます。よろしくお願いいたします。

 

Visual C++ チーム

 

 

More Posts Next page »
 
Page view tracker