君はマニフェストを知っているか?(VISTA対応-その2)

ごめんなさい、私も最近まで知りませんでした。
■なんでマニフェストを書く事になったのか?
VISTAから新しく「UAC」のセキュリティー機能が強化され、場合によってはプログラムの起動に許可が必要になりました。
■「UAC」って何?
VISTAは通常、管理者権限のない状態で動作しています(管理者でログインしたとしても)。その状態で管理者権限の必要な動作をする場合、警告してきます。(「Program Files」の下にファイルを書き込もうとした場合、管理者権限が必要になります。)
これを回避するためには、VISTAのUAC機能を切る方法もあるのですが、今回はプログラムの権限を昇格させて動作させる方法を選びました(権限の昇格はマニフェストを記述する事で可能になります)。
マニフェストの設定
「プロジェクト」の「プロパティ」を選択し「プロパティーページ」ダイアログを出してください。

ここで「マニフェストツール」の「入力と出力」を選択し、「追加のマニフェストファイル」でファイルを指定してください。

マニフェストの記述
まずはマニフェストを書いてみました。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="X86"
    name="WindowsApplication"
    type="win32"
/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security xmlns="urn:schemas-microsoft-com:asm.v3"> 
        <requestedPrivileges> 
            <requestedExecutionLevel level="requireAdministrator"/> 
        </requestedPrivileges> 
    </security> 
</trustInfo>
</assembly>

これでVISTAで動作OK・・・・・確かにVISTAでは動きました・・・・がWindowsXPでこのプログラムを動作させると、青い画面でOSがフリーズする時があるようです。久しぶりに青い画面を見ました(以下のようなエラーが出ます)。

STOP C000021a Unknown Hard Error
Unknown Hard Error

調べてみると以下のように修正する事で大丈夫のようです。(ブルー画面になるのはXPのバグのようですが)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="X86"
    name="WindowsApplication"
    type="win32"
/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator"/>
        </requestedPrivileges>
   </security>
</trustInfo>
</assembly>

これで少し様子を見ようと思います。