Проект установки Visual Studio - Настройки реестра для каждого пользователя - PullRequest
17 голосов
/ 04 августа 2008

Я пытаюсь сохранить проект установки в Visual Studio 2003 (да, это устаревшее приложение). Проблема, с которой мы столкнулись на данный момент, заключается в том, что нам нужно записывать записи реестра в HKCU для каждого пользователя компьютера. Они должны быть в HKCU, а не HKLM, потому что они являются пользовательскими настройками по умолчанию, и они меняются для каждого пользователя. Я чувствую, что

  1. Это невозможно
  2. Это не то, что должен делать установщик, а то, что должно делать приложение (в конце концов, что происходит, когда профиль пользователя создается после установки?).

Имея это в виду, я все еще хочу изменить как можно меньше в приложении, поэтому мой вопрос: возможно ли добавить записи реестра для каждого пользователя в Visual Studio 2003 проекте установки?

И на данный момент проект перечисляет пять корневых ключей реестра (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS и Hive пользователя / компьютера). Я действительно ничего не знаю о корневом ключе Users и не видел User / Machine Hive. Может ли кто-нибудь просветить меня, кто они? Возможно, они могли бы решить мою проблему выше.

Ответы [ 4 ]

5 голосов
/ 04 августа 2008

Во-первых: Да, это то, что относится к Приложению для того резонанса, который вы указали: Что происходит после создания новых пользовательских профилей? Конечно, если вы используете домен, возможно, что некоторые вещи будут помещены в реестр при создании, но на самом деле это не тот случай использования. Приложение должно проверить, есть ли настройки, и использовать настройки по умолчанию, если нет.

При этом возможно изменять ключи других пользователей через куст HKEY_USERS.

У меня нет опыта работы с проектом установки Visual Studio 2003, так что вот немного (совершенно не связанного) кода VBScript, который может просто дать вам представление, где искать:

const HKEY_USERS = &H80000003
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = ""
objReg.EnumKey HKEY_USERS, strKeyPath, arrSubKeys
strKeyPath = "\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing"
For Each subkey In arrSubKeys
    objReg.SetDWORDValue HKEY_USERS, subkey & strKeyPath, "State", 146944
Next

(код предоставлен Jeroen Ritmeijer )

5 голосов
/ 04 августа 2008

Я предполагаю, что, поскольку вы хотите установить его для всех пользователей, вы используете какой-то общий компьютер, который, вероятно, работает в домене?

ЗДЕСЬ БУДУТ ДРАКОНЫ

Допустим, Джо и Джейн регулярно заходят в компьютер, тогда у каждого из них будут «реестры».

Затем вы установите свое приложение, и установщик будет использовать гигантские хаки и отвратительные вещи, чтобы устанавливать для них элементы в HKCU.

ТОГДА, Боб придет и войдет в систему (он и еще 500 человек имеют учетные записи в домене и могут это делать). Он никогда не использовал этот компьютер раньше, поэтому у него нет реестра. При первом входе в систему Windows создает его, но у него не будет ваших настроек.

Затем ваше приложение падает или работает некорректно, и Боб громко жалуется на эти дрянные продукты от включенного Райниксона.

Правильный ответ - просто добавить в приложение некоторые настройки по умолчанию, которые могут записать их в реестр, если он их не найдет. Как правило, ваше приложение никогда не должно зависеть от реестра и должно создавать необходимые элементы для любой записи реестра, а не только для HKCU, в любом случае

1 голос
/ 04 августа 2008

Несмотря на то, что в статье MSDN Архив статьи MSDN говорится о кусте пользователя / машины, он не пишет в HKEY_USERS. Скорее он пишет в HKCU, если вы выбираете Just Me, и HKLM, если вы выбираете всех.

Таким образом, мое решение будет состоять в использовании куста пользователя / компьютера, а затем в приложении он проверяет, есть ли записи реестра в HKCU, и, если нет, копирует их из HKLM. Я знаю, что это, вероятно, не самый идеальный способ сделать это, но он имеет наименьшее количество изменений.

1 голос
/ 04 августа 2008

Я на полпути к своему решению с этой записью в MSDN (не знаю, как я не смог найти ее раньше).

Пользователь / Машинный Улей
Подключи и значения, введенные в этом кусте, будут установлены в кусте HKEY_CURRENT_USER, когда пользователь выбирает «Просто я» или куст HKEY_USERS, или когда пользователь выбирает «Все» во время установки.

Редактор реестра Архив статьи MSDN

...