web-dev-qa-db-ja.com

Delphi 7 Vista / Windows7マニフェスト

Windows XP/Vista/7でアプリを管理者として実行できるようにするDelphi7のマニフェストファイルの例はありますか?

この機能を使用してアプリケーションを実行すると、通常、 ユーザーアカウント制御(UAC) ダイアログが表示され、特権権限を要求されます。

15
colin

手順は次のとおりです。

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パーツを削除して、テーマのサポートを無効にすることもできます。

。マニフェストをリソースにコンパイルします:プロジェクトディレクトリにWin7UAC.rcという名前のファイルを作成します。このファイルには次のような1行が含まれます。

1 24 "Win7UAC.manifest"

このファイルをコンパイルするには、cmdに移動し、プロジェクトディレクトリをポイントして、次のコマンドを実行します。

brcc32.exe Win7UAC.rc

4。リソース(マニフェスト)をプロジェクトに追加します:プロジェクトのユニットファイルの1つに、次の行を追加します。

{$R 'Win7UAC.res'}

この行を追加するのに適した場所は、プロジェクトのメインファイル(通常はProject1.dprという名前)と{$R *.res}行の下です。

5。プロジェクトを再構築します

6。XPManコンポーネントをプロジェクトユニットのanyに追加すると、このUACマニフェストは正しく機能しなくなります。

21
Isaac

ここにいくつかの有益なリンクがあります

Vista UIメインフェスト

DelphiおよびWindows Vistaのユーザーアカウント制御

<?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>
6
Sigurdur

これは私にとってはうまくいきます:

<?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>
2
Cosmin Prund

Delphi XEを使用して、これを機能させるには、[プロジェクト]-> [オプション]-> [アプリケーション]タブの[ランタイムテーマを有効にする]をオフにする必要がありました。

編集:申し訳ありませんが、このオプションを有効にすると機能するようです。

2
user729103