管理者権限でアプリケーションを動作させるためには - 注意点
権限上昇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を反映したい場合は、両方ともリソースに組み込まなければならないのです。
|