10

プログラム設定を Windows レジストリに書き込むアプリケーションがありますが、これは絶対に必要なので、ファイルへの保存はオプションではありません。

これを簡単にするために、プログラム ファイル/ショートカットを右クリックする方法を説明する代わりに、「管理者権限」ナグ画面を表示したいと思います。

かなり良い記事を見つけましたが、マニフェスト用に独自のリソース ファイルを追加すると、リソースが重複しているというエラーが表示されます。

これはおそらく内部マニフェストとの競合が原因であり、問​​題を解決するために、プロジェクト オプションで「ランタイム テーマを有効にする」を無効にすることを提案する多くのコメントが表示されます。すべてのメニューを確認しましたが、見つからず、Delphi 7 では使用できない可能性があり、それ以降のバージョンで導入されたと言われました。

独自のマニフェストを追加するにはどうすればよいですか?

4

3 に答える 3

25

「プログラム設定をレジストリに書き込むことは、アプリケーションの管理者権限を付与する適切な理由ではありません」とすでにコメントしました。ただし、どのような場合でも UAC マニフェストを含めることをお勧めします。共通requestedExecutionLevelする必要がありますlevel="asInvoker"ドキュメントを参照してください

"Q: Adding manifest for admin rights request for delphi 7"

以下の 4 つのファイル (2 セット) を作成します。


(UAC のみ)

uac.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="MyApp" type="win32"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

uac.rc

1 24 "uac.manifest"

(UAC + XP テーマ)

uac_xp.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="MyApp" version="1.0.0.0" processorArchitecture="x86"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
  <!-- Windows Vista application security requirements. -->
  <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>
      <!--Windows 7-->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!--Windows Vista-->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
    </application>
  </compatibility>   
</assembly>

uac_xp.rc

1 24 "uac_xp.manifest"

「プロジェクト > プロジェクトに追加」メニュー項目を使用して、目的のrcファイル (uac.rc または) をプロジェクトに追加します。 uac_xp.rcこれ{$R}により、プロジェクト ファイルにディレクティブが作成されます。

program Project1;

{.$R 'uac.res' 'uac.rc'} // UAC only
// OR
{$R 'uac_xp.res' 'uac_xp.rc'} // UAC + XP Themes

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

に注意してください{$R 'uac_xp.res' 'uac_xp.rc'}rcDelphi はtoファイルを自動コンパイルしresます。

別の方法として、 Delphi IDE の外部でrcファイルをコンパイルすることもできます。次に、プロジェクトに手動でbrcc32 uac.rc追加します。{$R 'uac_xp.res'}


他の XP マニフェストを使用していないことを確認してください。

于 2013-02-05T15:18:09.700 に答える
12

Delphi 7 プロジェクトから「内部」マニフェストを削除するには?

その内部マニフェストは、コンポーネントによって表される Delphi に 7 回ありましたTXPManifest。その唯一の目的は、XPMan.pasユニットがドロップされたフォームのユニットの uses 句にユニットを追加することでした。次に、このXPMan.pas単元では、リソース ファイルとマニフェスト自体をプロジェクト出力に含めました。

したがって、この内部マニフェストTXPManifestを削除するには、プロジェクトのすべてのフォーム (使用している場合) からすべてのコンポーネントを削除し、プロジェクトXPManのすべてのユニットからすべての uses 句参照を削除する必要があります。

TXPManifestつまり、プロジェクトのすべてのユニットに対して次の 2 つの手順を実行します (コンポーネントを使用しなかった場合、最初の手順はオプションですが、2 番目の手順はオプションです)。

ここに画像の説明を入力

于 2013-02-05T08:33:34.470 に答える