7

Windows の起動時にのみ、現在のユーザーに対していくつかのアプリケーションを起動しようとしています。

次の方法でこれを達成できます。

RegistryKey oKey = Registry.CurrentUser.OpenSubKey("Software", true);
oKey = oKey.OpenSubKey("Microsoft", true);
oKey = oKey.OpenSubKey("Windows", true);
oKey = oKey.OpenSubKey("CurrentVersion", true);
oKey = oKey.OpenSubKey("Run", true);
oKey.SetValue("Application 1", "C:\\path\\to\\ap1.exe");
oKey.SetValue("Application 2", "C:\\path\\to\\ap2.exe");

しかし、これを Visual Studio インストーラー プロジェクトの一部として実行しようとしています。カスタム アクションを追加しました。プログラムは正常に起動し、インストーラーは XP でうまく動作します。

Windows 7 では、インストーラーは昇格された特権を取得し、現在のユーザーのレジストリにエントリを挿入する以外はすべて実行します。ただし、スタンドアロン アプリケーションとして (インストーラー プロジェクトの外部で) 実行すると、レジストリ エントリが挿入され、昇格された特権は取得されません。

私が理解できる唯一のことは、昇格された特権で、現在のユーザーではなく管理者アカウントにエントリを挿入しようとしていることです? または、私が見逃しているものは他にありますか?ここで私の目標を達成できる別の方法はありますか?

4

2 に答える 2

2

ユーザーのスタートアップ フォルダーを使用しない理由はありますか?

おそらく問題は、インストーラーを実行しているユーザーです。ユーザーが管理者でない場合、昇格されたインストーラーは、プロセスを昇格したユーザーのコンテキストで実行されます。

アプリケーションをスタートアップ フォルダに追加するか、最初の起動時にレジストリ キーを追加する方が安全です。

于 2012-08-27T18:54:44.513 に答える
1

インストーラーが昇格されたアクセス許可を取得している場合、なぜ設定を HKCU に書き込むのですか? 代わりに HKLM に書き込みます。その後、すべてのユーザーに対して有効になります。

于 2012-08-27T18:41:04.617 に答える