Delphi 7 vista / windows 7清单

时间:2011-01-21 10:10:24

标签: delphi delphi-7 manifest uac

有没有人会有一个Delphi 7清单文件的例子,它允许应用程序在Windows XP / Vista / 7上以管理员身份运行?

使用此功能运行应用程序通常会导致User Account Control (UAC)对话框询问特权权限。

4 个答案:

答案 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)

以下是一些信息性链接

Vista UI mainfest

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; '应用'标签 为了这个工作。

编辑:抱歉,似乎确实启用了此选项。