Как я могу установить это значение реестра для моего пользователя из моего установщика

Проблема с https://stackru.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

2 ответа

Решение

Как мы с Рипплом прокомментировали, код не нужен. Перейдите к представлению "Реестр" в проекте установки, щелкните правой кнопкой мыши "Программное обеспечение" в разделе HKEY_CURRENT_USER и добавьте ключ Microsoft, затем Windows, CurrentVersion, затем "Выполнить", добавив каждый ключ.

Затем в представлении "Выполнить ключ" щелкните правой кнопкой мыши в области "Имя", "Вид" справа и добавьте новое строковое значение, имя которого будет вашим именем. Значение, как я полагаю, является путем к вашему exe-файлу и (при условии, что оно находится в папке Application) делает значение [TARGETDIR]my.exe.

Если ваша установка "Все", то есть вполне веская причина, по которой она не может работать. Это не имеет ничего общего с кодом. При установке "Все" этот код настраиваемого действия выполняется с системной учетной записью (НЕ с пользователем, выполняющим установку), поэтому вы пытаетесь создать ключ запуска для системной учетной записи.

Вот как можно написать параметры автозапуска:

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();
    }
Другие вопросы по тегам