私は2つの実行可能ファイルを持っていますが、最初のファイルは2番目のファイルを実行する必要があります。 2つめのファイルには、asInvoker
、requireAdministrator
など
実行可能ファイルのマニフェストを変更することはできますか?私はC
の簡単な解決策を探しています。
異なるタイプのマニフェストで実行可能なコピーをほとんど保持しないようにしたいですし、サードパーティのツールを変更する可能性があります。ところで、それは可能であり、このツールが存在します:MT
(マニフェストツール)ビジュアルスタジオパッケージから、link。実行ファイルでマニフェストを変更するにはどうすればよいですか?
答えて
はい、Win32 SDKからmt.exe
を使用してマニフェストファイルを変更できます。しかし、それは開発やテスト中に行うべきことです。このツールを顧客のマシンに展開することはできないため、このツールを使用してマニフェストを前後に動的に変更することはできません。
しかし、これは実行時にマニフェストファイルを前後に変更する必要がないためです。実行可能ファイルのマニフェストファイルには、そのEXEに対しての最小必要特権を指定する必要があります。したがって、ユーザーが管理特権なしで(つまり高度なしで)EXEを実行することができれば(アプリが限定された機能で実行されていることを意味していても)、アプリのマニフェストで「asInvoker」を指定する必要があります。追加機能が必要な場合は、管理者権限でいつでもアプリを実行することができます。
もちろん、高度でプログラムでEXEを起動することもできます。 lpVerb
パラメータの "runas"動詞を指定してShellExecuteEx
を使用してこれを行います。これは、アプリケーションマニフェストの権限レベルを "requireAdministrator"に設定するのと同じ効果を持ちます。
あなたのアプリケーションがどのように設定されているかは、あなたの質問から完全にはっきりしません。通常、最初のEXEにはマニフェストに "asInvoker"が設定されているので、どのユーザーでも実行できます。何かをするために管理者権限は必要ありません。ただし、がの場合は、管理者権限が必要な操作が必要な場合があります.UACシールドアイコンでUIの一部を表示し、それをクリックすると、マニフェストに「requireAdministrator」が設定された2番目のEXEが起動します。仰角を必要とするタスクを実行します。この2番目のアプリは、 "asInvoker"フォームで配布する必要はありません。常にには標高が必要です。これは、オペレーティングシステムに同梱されているビットを含め、Microsoftのすべてのアプリケーションがどのように設定されているかに気づくでしょう。
ありがとう@RbMm for his comment
また、私の質問はduplicateです。申し訳ありませんが、私はこれ以前にこれを発見していません。
ので、溶液(エラー処理や省略が含まれる):さらなる世代のための
HANDLE handle = BeginUpdateResourceW(file, TRUE);
UpdateResourceW(handle, RT_MANIFEST, CREATEPROCESS_MANIFEST_RESOURCE_ID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), manifest, strlen(manifest));
EndUpdateResourceW(handle, FALSE);
注:
- マニフェストは
short chars
にする必要があります -char *
代わりのwchar *
- エラー(たとえば、不正なXML構文)は、
Event Viewer
のセクションWindows Logs -> Application
- 一部のツール(Resource Hacker)が開いてマニフェストを表示することもできますが、エラーもなくユニコードマニフェストが表示されます...
- 1. 実行時にapp_nameをAndroidのマニフェストに変更するにはどうすればよいですか?
- 2. 実行前にhtmlファイル内のアプリケーション/ jsonスクリプトを変更するにはどうすればよいですか?
- 3. アプリフレーバに基づいてマニフェストの権限を変更するにはどうすればよいですか?
- 4. .luaファイルを実行するにはどうすればよいですか?
- 5. ファイル名を変更するにはどうすればよいですか?
- 6. Pythonで実行中にスレッドに変数の変更を渡すにはどうすればよいですか?
- 7. これを変更してpostgresqlで実行するにはどうすればよいですか?
- 8. ファイル内で行われたコミットの変更を確認するにはどうすればよいですか?
- 9. 変更を変更するにはどうすればよいですか?
- 10. ファイルの変更時にFirefox自動更新を行うにはどうすればよいですか?
- 11. デバッグモードで実行中にJavaコードを変更するにはどうすればよいですか?
- 12. そのディレクトリでディレクトリを変更してコマンドを実行するにはどうすればよいですか?
- 13. Xamarin Forms Projectでツールバーにアクセスし、実行時に変更するにはどうすればよいですか?
- 14. マニフェストの変更だけを実行するとjarタスクが実行されないようにする
- 15. シェルスクリプトで実行可能ファイルを実行するにはどうすればよいですか?
- 16. 実行中のigniteインスタンスでキャッシュ設定を変更するにはどうすればよいですか?
- 17. Androidビューでサイズ変更アニメーションを実行するにはどうすればよいですか?
- 18. ファイルの作成、変更、アクセス日をプログラムで変更するにはどうすればよいですか?
- 19. 変更されたソースファイルの単体テストを実行するにはどうすればよいですか?
- 20. 実行時にオートコンプリートのHTMLコードを動的に変更するにはどうすればよいですか?
- 21. .jsファイル内の変数を.htmlファイルから変更するにはどうすればよいですか?
- 22. extjsの実行時にプロキシのextraParams設定を変更するにはどうすればよいですか?
- 23. 実行時に画像を変更するにはどうすればよいですか?
- 24. 実行時に関数のパラメータを変更するにはどうすればよいですか?
- 25. プログラムの実行中にChromeDriverの設定を変更するにはどうすればよいですか?
- 26. 実行時にfeign urlを変更するにはどうすればよいですか?
- 27. プログラムの実行中にQPyLineEditの内容を変更するにはどうすればよいですか?
- 28. StackExchange.Redis - 実行時に構成を変更するにはどうすればよいですか?
- 29. セッションの実行中にAVCaptureMovieFileOutputビデオの方向を変更するにはどうすればよいですか?
- 30. 実行時にIonicアプリのアプリアイコンと名前を変更するにはどうすればよいですか?
マニフェスト - このあるリソース(exeファイルの*のためのタイプ= 'RT_MANIFEST'、名前=' CREATEPROCESS_MANIFEST_RESOURCE_ID'(*) - あなたが使用することができます[ 'UpdateResource'](https://msdn.microsoft.com/en-私たち/ライブラリ/ windows/desktop/ms648049(v = vs.85).aspx)の代わりに、もちろんexeが署名されていない場合 – RbMm
私のexeは署名されていない、私はこの機能をチェックします。 – Jury
署名はこれとは何の関係もなく、RbMmが提案した手法を実際のコードで使用すべきではありません。彼は文字通り 'mt.exe 'それは(悪い設計や誤解の証拠です)(https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)です。 –