有没有人会有一个Delphi 7清单文件的例子,它允许应用程序在Windows XP / Vista / 7上以管理员身份运行?
使用此功能运行应用程序通常会导致User Account Control (UAC)对话框询问特权权限。
答案 0 :(得分:21)
以下是步骤:
<强> 1。删除XPMan
:删除对项目中XPMan
组件的任何引用。 XPMan
向可执行文件添加了一个默认清单,阻止Windows查看我们的自定义清单。您不应该担心XPMan
提供的 XP主题,主题支持会保留在以下清单中。
<强> 2。创建自定义清单:在项目目录中创建类似Win7UAC.manifest
的文件(文件名确实无关紧要)。将以下行添加到Win7UAC.manifest
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" name="App" version="3.1.0.0" processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!--The ID below indicates application support for Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!--The ID below indicates application support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
</application>
</compatibility>
</assembly>
您可以向此清单添加更多项目。您还可以删除Microsoft.Windows.Common-Controls
部分以禁用主题支持。
第3。将清单编译为资源:在项目目录中创建一个名为Win7UAC.rc
的文件,其中包含一行:
1 24 "Win7UAC.manifest"
要编译此文件,请转到 cmd ,指向项目目录并运行以下命令:
brcc32.exe Win7UAC.rc
<强> 4。将资源(清单)添加到项目中:只需在项目的某个单元文件中的任何位置添加以下行:
{$R 'Win7UAC.res'}
添加此行的合适位置位于项目主文件(通常名为Project1.dpr
)且位于{$R *.res}
行下。
<强> 5。重建项目
<强> 6。请记住,每当您将XPMan组件添加到任何项目单元时,此UAC清单将无法正常运行。
答案 1 :(得分:6)
以下是一些信息性链接
Delphi and Windows Vista User Account Control
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="x86" />
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="highestAvailable"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
答案 2 :(得分:2)
这对我来说很好用:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="x86"
/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="highestAvailable" />
</requestedPrivileges>
</security>
</assembly>
答案 3 :(得分:2)
使用Delphi XE,我必须取消选中“启用运行时主题” '项目' - &gt; '选项' - &gt; '应用'标签 为了这个工作。
编辑:抱歉,似乎确实启用了此选项。