Programming Windows Maniacs - プログラミング ウィンドウズ マニアックス ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて  
ホーム >> OS >> Windows®Vista™ >> 管理者権限でアプリケーションを動作させるためには - 注意点

管理者権限でアプリケーションを動作させるためには - 注意点

   権限上昇manifestを組み込むのと同時にOSのTheme反映用manifestも組み込む際は、注意が必要です。

  Vistaの場合、リソースにmanifestが含まれているとき、外部のmanifestは一切反映されなくなります。
  つまり、権限上昇用だけリソースに組み込み、OSのTheme用に実行ファイルと同一ディレクトリにmanifestファイルをおく、のようなことはできなくなります。
  この場合、OSのThemeが反映されません。

  下記は、権限上昇するとともに、OSのThemeも反映する例です。

 

■■■ msfst2 プロジェクト
■main.cpp

#include <windows.h>
#include <tchar.h>

// エントリポイント
int WINAPI _tWinMain ( HINSTANCE hThisInstance,
    HINSTANCE,
    _TCHAR *,
    int )
{
    MessageBox ( NULL,
        _TEXT ( "権限上昇のサンプルです。" ),
        _TEXT ( "確認" ),
        MB_OK );

    return 0;
}
■resrc.rc
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "mnfst2.exe.manifest"
■mnfst.exe.manifest
<?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="mnfst2.exe"
       type="win32"/>

    <description>Privilege's elevation for sample2</description>
    <!-- Identify the application security requirements. -->
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel
                  level="requireAdministrator"
                  uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo>

<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

   権限上昇が必須でOSのThemeを反映したい場合は、両方ともリソースに組み込まなければならないのです。

  ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて Copyright © 2014 A.Morita