4

以下に書き込む 32 ビット アプリケーションがあります。

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

現在のユーザーがログオンしたときにアプリケーション パスが開始されるようにします。これは 32 ビット システムで正常に動作します (つまり、アプリケーションは自動起動します)。

64 ビット システムでは、レジストリ リダイレクトが機能することを理解しています。だから、私は検索しました:

HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

しかし、CurrentVersion サブキーは存在しません (ただし、Wow6432Node キーは存在します)。そのため、手動で作成し、アプリケーションがレジストリに正しく書き込みました (レジストリに移動して確認しました。エントリはそこにありました)。しかし、現在のユーザーがログインしたときにアプリケーションが自動起動しませんでした。理由を教えてもらえますか?

ところで、HKEY_LOCAL_MACHINE ブランチを使用すれば、これで問題ありません。しかし、私はこれをユーザー固有にしたいと考えています。

Startup フォルダーだけを使用しないのはなぜですか?

UAC が有効で、常に通知するように設定されている場合、これは単に機能しません (つまり、アプリケーションが自動起動しません)。いいえ、UAC を無効にすることはできません。私のアプリケーションは、UAC を有効にし、常に通知するように設定した状態で正常に動作する必要があります。

誰かが理由を教えてくれれば、レジストリを使用する必要性を喜んで忘れます (私はレジストリが嫌いです)。

フォールバック オプション (最後の手段):

これを行うには、タスク スケジューラ API を使用します。ただし、やむを得ない場合に限ります

ありがとう!

4

2 に答える 2

0

ユーザーの Run キーまたは Startup フォルダーから昇格が必要な実行可能ファイルを起動することはできません。UAC チームのブログの「ユーザーのログオン パスで昇格がブロックされるようになった」を参照してください。

おそらく最善の解決策は、昇格を必要としないように実行可能ファイルを構成することです。次に、実際に必要な場合にのみ、昇格された自身のコピーを起動できます。または、昇格が必要なタスクにサービスを使用することもできます。管理者特権を持たないユーザーに代わって昇格されたタスクを実行できるようにする必要がある場合は、これが唯一の適切な方法です。

別のオプションは、HKLM を使用してプロセスを正常に起動できるため、すべてのユーザーに対してプロセスを起動し、必要なユーザーでない場合はすぐに終了することです。

于 2013-05-02T20:58:23.167 に答える