Windows 7でQtを使ってアプリケーションを作成しました。 アプリケーションは通常のユーザー権限で起動しますが、レジストリを変更してアプリケーションを自動起動したいので、管理者権限を取得したいと考えています。
どうすればこれを行うことができますか?
MSDN サンプルを見てみましょう: UAC 自己昇格 (CSUACSelfElevation)
また、ウィキペディアには、 ShellExecuteEx()の「runas」動詞と昇格要求のアプリケーション マニフェストに関する情報を含む、非常に優れた参考文献があります。
exeに正しいマニフェストを埋め込む必要があります。
http://msdn.microsoft.com/en-us/library/windows/desktop/bb756929.aspx。
win32 APIを使用するとおっしゃっていましたが、この標準的で推奨される方法を検討してください。
アプリケーションを自動起動するために管理者権限は必要ありません。
適切なキーを次のアドレスに書き込むだけです。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
これは管理者権限を必要としません(の下の同じパスとは異なりますHKEY_LOCAL_MACHINE
)。
アプリケーションを自動起動するために、管理者権限は必要ありません。HKLM(管理者権限が必要な場合)の下にレジストリキーを追加する代わりに、HKCUを使用すれば問題ありません。
プログラムの実行中は権限を変更できないことに注意してください。強制終了し、正しい権限で再起動する必要があります。
HKLM でアプリケーションを自動起動するには、管理者権限が必要です。ただし、実行中にアプリケーションの権限を変更することはできませんでした。
そこで、メインアプリケーションを自動起動させるためにレジストリを書き込むだけの新しい小さなアプリケーションを作成しました。
メイン アプリケーションは、ShellExecuteEx を使用してこのアプリケーションを呼び出し、管理者権限を要求することができます。