0

https://stackoverflow.com/a/37859812/4878558からの問題

インストールを開始する現在のユーザーのレジストリ値を設定する必要があります。インストールがシステムモードになってから - 現在のユーザーについては何も知りません

また、「System.UnauthorizedAccessException」を与える私のコード

SecurityIdentifier sID = WindowsIdentity.GetCurrent().User;
var subKey = Registry.Users.OpenSubKey(sID + "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
subKey.SetValue("test", "test");
enter code here
4

2 に答える 2

1

Ripple と私がコメントしたように、コードは必要ありません。セットアップ プロジェクトの [レジストリ] ビューに移動し、HKEY_CURRENT_USER の下の [ソフトウェア] を右クリックして、キー Microsoft、Windows、CurrentVersion、Run の順に追加し、各キーを追加します。

次に、Run key ビューで、右側の Name, View ペインを右クリックし、新しい文字列値を追加します。名前は自分の名前です。値は、e​​xe へのパスであり、(Application フォルダーにあると仮定して) 値を [TARGETDIR]my.exe にします。

インストールが「Everyone」インストールの場合、それが機能しないのには十分な理由があります。これはコードとは関係ありません。Everyone インストールでは、そのカスタム アクション コードがシステム アカウント (インストール ユーザーではない) で実行されているため、システム アカウントの実行キーを作成しようとしています。

于 2016-06-18T16:55:05.757 に答える
0

自動起動オプションの書き方は次のとおりです。

const string AutorunRegistryKey = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run";
Registry.SetValue(AutorunRegistryKey, <AppName>, <PathToApplication>);

自動起動から削除する場合:

const string AutorunRelativePath = @"Software\Microsoft\Windows\CurrentVersion\Run\";
var key = Registry.CurrentUser.OpenSubKey(AutorunRelativePath, true);
    if (key != null)
    {
        key.DeleteValue(<AppName>, false);
        key.Close();
    }
于 2016-06-16T19:35:05.677 に答える