VC6 在Vista Win7 下提高权限问题

以下程序集清单(Assembly Manifest)示例使你的程序在VISTA和WIN7下需要管理员权限,即在程序运行时弹出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="test.exe.manifest"
    type="win32"
/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo>
</assembly>

如果希望更改 Windows 用户帐户控制级别,请用以下节点之一替换 requestedExecutionLevel 节点。

<!--普通权限-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<!--管理员权限-->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<!--最高权限-->
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

以下程序清单文件文件使你的程序使用WINXP风格的控件:
<?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="Test.exe.manifest"
    type="win32"
/>
<description>Test application for xp style.</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

关联方式一般有两种:程序内部嵌入和外部关联。

程序内部嵌入方式的操作步骤为:
1. 新建一个程序集清单(Assembly Manifest)文件命名为"你的应用程序名.manifest",如你生成的文件为"Test.exe",那程序集清单(Assembly Manifest)文件名为"Test.exe.manifest"。
2. 导入资源选择刚刚新建的程序集清单(Assembly Manifest)文件(Test.exe.manifest),在弹出的资源类型对话框中输入"RT_MANIFEST",找到刚刚添加的资源,将它的ID属性修改为1,当然对于内部嵌入来说程序集清单文件名,资源类型和ID都是可以自定义的。
3. 重新编译你的程序即可。

外部关联方式的操作步骤为:
1. 新建一个程序集清单(Assembly Manifest)文件命名为"你的应用程序名.manifest",如你生成的文件为"Test.exe",那程序集清单(Assembly Manifest)文件名为"Test.exe.manifest"。
2. 将"Test.exe.manifest"放在你编译的"Test.exe"同一目录下即可。

注:若使用程序内部嵌入方式且程序集清单中定义需要管理员权限或以上权限时,编译的程序图标将有小盾牌标示,外部关联不会显示小盾牌。

我发现,在使用内部嵌入的时候,在XP下可以正常使用,但是在Vista 或是WIN7 程序会死掉,所以需要把导入的文件名修改下,改成:Test.xml 再导入进去就可以了

来自: http://hi.baidu.com/invisiable/blog/item/332805d9bab345e438012ff1.html


附加一点:如果是共享dll的话:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    name="TENCENT GAME"
    processorArchitecture="x86"
    version="1.0.0.0"
    type="win32"/>
<dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.6195" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
</dependency>

<description>TENCENT GAME</description>

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel
                level="highestAvailable"
                uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo>

注意name不同


原文地址:https://www.cnblogs.com/hgy413/p/3693666.html