Qt アプリケーションを管理者として実行する方法はありますか? アプリケーションの自動アップデータがあります。Program Files フォルダ内のファイルを置き換えるには管理者権限が必要なため、管理者権限が必要です。
3 に答える
管理者権限でアプリケーションを実行することは、Qtとはあまり関係がありません。2つのアプローチがあります。
「単純な」方法は、管理者権限で実行するようにアプリケーションを手動で設定することです。これを行うには、実行可能ファイルを右クリックします。次に、[互換性]タブで、[特権レベル]の下の[このアプリケーションを管理者として実行する]を選択できます。
ただし、同じことを自動的に実現したい場合は、マニフェストをアプリケーションに埋め込む必要があります。探しているのは、をに設定するrequestedExecutionLevel
ことrequireAdministrator
です。もう少し詳しい情報は、MSDNまたはUACのこのウィキペディアのエントリにあります。
Qt Creatorに組み込まれているアプリケーションの場合、リソース(.rc)ファイルにマニフェストへの参照を含めることでマニフェストを埋め込む必要があることを意味します。このリソースファイルは、.proを指定して.proファイルに追加できますRC_FILE = myapp.rc
。この問題に関する有益なブログ投稿は、これとQtCentreフォーラムのこの投稿です。
これに対する非常に簡単な解決策は、MSVC
ツールキットを使用している場合、プロジェクト ファイルに次を追加することです。
QMAKE_LFLAGS_WINDOWS += "/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\""
を使用してQt 5.12 msvc2017
います。
generated に見られるようにMakefile
、Qt は既にいくつかのマニフェスト関連のリンク フラグを追加しており、このアプローチは、既存のファイルからマニフェストを手動で追加するため、マニフェストを既に埋め込んでいることを妨げません。
その他のマニフェスト リンク オプションは簡単に追加できます。VSコンパイラのドキュメントを読んだり、Visual Studio IDEが提供するフラグ/オプションを確認したり、リンカーのセクションをProject properties/Linker/Manifest File
チェックCommand Line
してそれらがどのように追加されるかを確認したりできます。
gcc
@H Aßdøµclang
と @Bart が提供するソリューションが必要になる可能性があります。
@Bart氏に言及した記事から:
アプリケーション マニフェスト
まず、アプリケーション マニフェスト ファイルを準備する必要があります。以下は、管理者権限を必要としないアプリケーション用です。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="2.0.2.0" processorArchitecture="X86" type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
MT.exe
次に、この XML を実行可能ファイルに埋め込むには、Microsoft Windows SDKのツールが必要です。これを行うには、次のコマンドを使用します。
mt.exe –manifest MyApp.exe.manifest -outputresource:MyApp.exe;1
自動マニフェスト埋め込み
コンパイルのたびに手動で mt コマンドを実行するのは面倒な作業です。私たちのためにそれを行うようにqmakeを説得するのはどうですか? ドキュメントを調べた後、次の行でうまくいくようです。
win32 {
WINSDK_DIR = C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A
WIN_PWD = $$replace(PWD, /, \\)
OUT_PWD_WIN = $$replace(OUT_PWD, /, \\)
QMAKE_POST_LINK = "$$WINSDK_DIR/bin/x64/mt.exe -manifest $$quote($$WIN_PWD\\$$basename(TARGET).manifest) -outputresource:$$quote($$OUT_PWD_WIN\\${DESTDIR_TARGET};1)"
}
上記のコードは、WINSDK_DIR から mt.exe プログラムを自動的に実行し、プロジェクトのルート ディレクトリにあり、プロジェクトのターゲット (つまり、MyApp.manifest) にちなんで名付けられたマニフェスト ファイルを埋め込みます。マニフェストの追加は以上です。次はバージョン情報を指定します。
元の投稿: http://blog.strixcode.com/2010/08/embedding-application-manifest-and.html