私はこの質問に対する回答/回避策を持っています。
最初に、私はAppCompatFlagsを使用することが(アプリケーションとインストーラを設定する適切な方法ではない)というコメントに敬意を表します。レジストリのこのセクションを変更するだけで、Windows GUIを使用してミラーリングし、実行可能ファイルの特権レベルを変更します。マニフェストファイルを追加するよりも実装が簡単です。ユーザーが権限レベルを管理者として実行しないように変更する必要がある場合や、GUIで簡単に権限レベルを変更することができます。
とにかく、実行可能ファイルの特権レベルを管理者として実行するように設定しようとしたのと同じ問題がありました。 GUIで設定できることはわかっています。
- ショートカットまたはを右クリックします。EXEファイルと互換性]タブ
- (この時点で、あなただけ、またはすべてのユーザーのための特権レベルを設定することができます。私は、すべてのユーザーのためにそれをやって好む)の[プロパティ
- クリックして選択し
- ボタンをクリックして、変更すべてのユーザーの設定
- 新しいプロパティ]ウィンドウで変更を保存するには[OK]を数回クリックし、「管理者としてこのプログラムを実行する」の特権レベルチェックの下
- 「すべてのユーザーのための互換性」というタイトルのタブで開いています。
変更が保存されると、レジストリの設定を見つける:私はこのようにGUIを使用して管理者として実行する.exe
を設定すると
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN"
、それは常に動作します。
ただし、GUIを経由せずに直接レジストリを変更しようとすると、プログラムは管理者として実行されません。レジストリは私が変更を加えたことを示し、実行可能ファイルの特権レベルを見ると、管理者として実行がオンにチェックされています。
私は、レジストリを変更することで、管理者として.exe
実行を行うには、いくつかの異なる方法を試してみました:
- 手動で使用された
.reg
ファイル
- から変更をインポートregeditを
- でレジストリを編集しましたコマンドラインツールreg.exeを使用してレジストリを変更する
- 現在使用していないWise Scriptツールを使用しました
- 使用したAutoITスクリプト
これらの方法はすべて同じことをしました。レジストリが変更され、GUIがそのプログラムを管理者として実行する必要があることが示されましたが、プログラムは管理者として実行されません。
私が遭遇したこの問題の解決策は、先に進み、設定でHKCU
キーとHKLM
キーの両方を変更することです。あなたはこれらのレジストリのセクションの両方を変更した場合
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN"
、そして.exe
は、管理者として実行されます。さらに重要なのは、別のユーザーがPCにログインすると、プログラムは管理者として実行されることです。これは、後続のユーザーのためにHKCUセクションが作成されていないレジストリの変更にもかかわらずです。
私はここで何が起こっているのか分かりませんが、機能しています。
ありがとうlextm。私はマニフェストファイルが私が作成しなかったexeファイルのために作ることができたことを知らなかった。あるいは、それらを埋め込む必要もなかった。リンクありがとう。 – JimDel
@JimDel:これらのリンクはすべて、マニフェストの埋め込みに関連しているように見えます。私が作っていないexeファイルのために、どうすればそれをやるのか見てきましたか? – Pete