結局、Windows 7って

RCを使って10日程度。Windows Vistaの焼き直しに過ぎないと思います。スピードも特に速くなっているとは思えません。少なくとも、Core i7 12GBとかいう環境では。

良いところ

でも、もう、Vistaには戻れないんだな。これが。
個人的に、この機能があるからWindows 7を使いたいと思える機能群は、

この滑らかさは癖になる。未だかつて使ったどんな拡大鏡ツールよりも滑らかでかつ実用的。Windows VistaでDWMを導入した甲斐があるって言うものだ。
あとは、おもしろいのは、拡大鏡で拡大している状態で、[Print Screen]を押した場合の挙動。なんと、拡大された状態のスクリーンがキャプチャできる。
で、後は、なぜか、ウィンドウのキャプションというか、タイトルバーだけは、他の部分と拡大方法が違うんだな。Windows Media Centerとか、XPS Viewerとかを見れば分かるけど、アプリケーションのアイコンだけがやけに高解像度。自前のアプリでも高解像度のアイコンを使っているはずだけどそうはならず。何でだろうなぁ。
ただ、VistaではWPFのアプリケーションは、拡大すると滑らか(解像度追従)だったのが、Windows 7ではそうならなくなっているようだ。GPUとメモリにウィンドウの内容を二重に持っていたのを止めたのと関係があるのだろうか?

f:id:espresso3389:20090510024040p:image

iTunesの存在価値が10%ぐらいになった。iTunesははっきり言って重いので、正直、iPodとのシンクロ以外では使いたくない。iTunesがファイルに埋め込むメタデータWindows 7ではエクスプローラからも簡単に参照できるようになったし、Windows Media Playerでは、m4a, m4vのファイルはデフォルトで見ることができるようになった。

f:id:espresso3389:20090510023808p:image

  • メディア共有

音楽ファイル、動画ファイルはLAN経由やインターネット経由で簡単に他のマシンから参照できる。簡単すぎて不思議なぐらい。家のマシンを常時起動しておけば、ネットにさえつながれば世界中のどこからでも再生できる。

  • リモートデスクトップ

ビデオコンテンツなどをリモートデスクトップで再生できるようになったのは大きい。これは大きな改善だと思う。実際、イーモバイル回線から家に接続して家のマシンに入っている動画を見たりすることができるのはすごい。
個人的には、リモートオーディオの「録音」が気になっているんだけど、これは、Skypeとかをリモートデスクトップで使ったらということか?まだ、使えてない。

f:id:espresso3389:20090510025433p:image

  • 最近開いたファイル

スタートメニューにpin(固定)したアプリケーションで開いたものは、アプリケーションごとに纏められて表示される。リモートデスクトップだと、右向きの矢印の上でカーソルをホバリングすれば、接続したコンピュータのリストが表示される。

f:id:espresso3389:20090510024334p:image

  • 使いやすくなった検索機能

そもそも、検索できる範囲が広くなっている気がする。検索語が検索一覧でハイライトされるようになったり、さらに、プレビューペーンを表示しやすくなっていたり・・・。
あと、インデックス化されていないファイル群の検索は速くなっている気がする。

f:id:espresso3389:20090510025215p:image

  • 日本語がまとも

個人的には、Windows Vistaは非常に良いOSだと思う。しかしながら、悲しいのは、日本語の質が悪すぎること。翻訳した人々が本当に日本人だったのかどうか疑わしいぐらいに酷かった。さらに、

  • ペイントでRedo/Undoが無制限

ペイントだけでもかなり普通に作業できるようになりました。

f:id:espresso3389:20090510024720p:image

  • 電卓が便利

プログラマが必要とする機能が一通りそろったと思えます。

f:id:espresso3389:20090510024721p:image

  • winverで表示されるロゴがまとも

Windows 2000以降、デグレードしていたのが、このロゴ。日本語版では、ロゴのビットマップが無理矢理引き延ばされていたので、かなりひどい状態になっていたのが、Windows 7では、センタリングされるように修正されている。細かい部分だけど、英語版以外が手抜きに見えていたのは事実なので、こういう部分が改善されたのはうれしい。

f:id:espresso3389:20090510024500p:image

問題点

とはいえ、欠点も。

  • ライブラリ

ライブラリのフォルダで右クリックしても、フォルダ向けのコンテキストメニューが出てこない。なので、C:\Users\XXX\Documentsとかでコマンドプロンプトを表示したい場合なんかがちょっと面倒。製品版までにどうにかしてくれるかなぁ?

  • ビデオドライバが不安定

描画がおかしくなったり、ブラックアウトすることがある。これも製品版までにどうにかしてほしい。まぁ、必然的に改善されるでしょうけど。

未だに、mt.exeがまともに動かないことがあります。Windows 7 SDK RCをインストールすれば許容可能な範囲まで安定しますが、それでも、まだ、ちょっと不安定。

  • UACの有無の基準が不鮮明

デフォルトから設定を変えればいいだけなんだけど、管理者権限が必要そうなところというか、確実に昇格しているはずのところでも、UACのダイアログが出てこない。「ファイルを開く」などから昇格したcmdなどを起動できるところは多々あるので、これが悪用されないかどうかが不安。これに関しては、ユーザーの意見に流されすぎている気がする。

まぁ、UACを除けば、単に「不安定」というのが問題。これは、製品版までに改善されるのでしょう。

VC90ランタイム問題まとめ

何度もこの問題について書き続けながら、まとめてなかった。

Visual C++ 9.0のランタイム問題
Visual Studio 2008 SP1
Visual C++ 9.0 SP1のランタイム問題
再考:Visual C++ 9.0 SP1のランタイム問題
_BIND_TO_CURRENT_VCLIBS_VERSIONについてまじめに調べてみる

結論から言うと、ランタイムのインストールは、vcredist_x86.exeの最新版を利用するか、あるいは、MSMを使ってインストールするのいずれかを選択するのが賢明であると言うこと。

vcredist_x86.exeを利用する

Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)
Microsoft Visual C++ 2008 SP1 Redistributable Package (x64)

vcredist_x86.exeは、最新版だったら、ファイルをぶちまけることはないし、ユーザーにランタイムをインストールしてもらう方法としては、悪くはないと思われる。

MSM(マージモジュール)を利用する

Microsoft_VC90_CRT_x86.msm
policy_9_0_Microsoft_VC90_CRT_x86.msm

の「両方」をインストールしないといけない。ポリシー(policy)って何?っていう疑問が出てくるんだけど、実はこのファイルがかなり重要。このファイルは何をしているのか知るために、インストールされたファイルを開いてみると、

x86_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_8550c6b5d18a9128.manifest

の場合、

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright (c) Microsoft Corporation.  All rights reserved. -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity type="win32-policy" name="policy.9.0.Microsoft.VC90.CRT" version="9.0.30729.1" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
      <bindingRedirect  oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30729.1"/>
      <bindingRedirect  oldVersion="9.0.30201.0-9.0.30729.1" newVersion="9.0.30729.1"/>
    </dependentAssembly>
  </dependency>
</assembly>

と書かれている。

細かい部分は置いておいて、結局、bindingRedirectという部分で、古いバージョンを新しいバージョンにリダイレクトしていることが分かる。
つまり、逆に言えば、このファイルがなければ、別バージョンのファイルは別バージョンとして扱われると言うこと。なるほど、こういう仕組みで動いていたんだねという感じ。

従来のDLL簡単入れ替えには微妙な躊躇があるけど、自分で完全互換であることが保証できるなら、こうやって明示的に代替することができるということみたい。

プライベートDLLとしてインストール

で、プライベートアセンブリとして配置する、つまり、アプリケーションのフォルダにMicrosoft.VC90.CRTなどのディレクトリをそのまま配置する場合に、どうやって、リダイレクトのポリシーを適用するのかについてはググってみたり、いろいろ実験してみたりしたけど、結局、分からず。

結論から言うと、当たり前すぎる方法で対処するしかないらしい。たとえば、下記は、VS2009SP1のMicrosoft.VC90.DebugCRT.manifestを9.0.21022.8を必要としているアプリケーション(つまり、_BIND_TO_CURRENT_VCLIBS_VERSIONをdefineしていないVC++9.0SP1でビルドしたアプリ)用に無理に修正したもの。
元々、9.0.30729.1と書かれていたのを、9.0.21022.8と書き換えただけ。
これで動く。本当は良くない感じもするが、MSが公式にリダイレクトしているのだから、特に問題でもないんでしょう。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <noInheritable></noInheritable>
    <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    <file name="msvcr90d.dll" hashalg="SHA1" hash="77c2dcb12982a6855302844f8803e68ce360fcc9"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>WA59/AbhIDaZgmB1cN9MFlDi2g4=</dsig:DigestValue></asmv2:hash></file> <file name="msvcp90d.dll" hashalg="SHA1" hash="b2fa2a05ee7e6a2595c16547246753a62e9bf398"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>Rxofhw9S95owIW2MDmCg2zStQgs=</dsig:DigestValue></asmv2:hash></file> <file name="msvcm90d.dll" hashalg="SHA1" hash="6cfc0c6330724d86db3e2ef295d4e1d75a43514a"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>iOxEMZK3fufMDQFuKGZ4VdAYzWY=</dsig:DigestValue></asmv2:hash></file>
</assembly>

ただねぇ、デバッグ目的ならばいいけど、配布するアプリケーションでこの手の芸当を利用するのはお勧めできないと思います。