Проект установки Visual Studio - параметры реестра пользователей

Я пытаюсь поддерживать проект установки в 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. Может ли кто-нибудь просветить меня, что это такое? Возможно, они могли бы решить мою проблему выше.


person Ray    schedule 03.08.2008    source источник


Ответы (4)


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

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

У меня нет опыта работы с проектом установки 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

(Код предоставлен Йеруном Ритмейером)

person Michael Stum    schedule 03.08.2008

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

ВОТ ДРАКОНЫ

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

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

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

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

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

person Orion Edwards    schedule 03.08.2008

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

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

person Ray    schedule 03.08.2008

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

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

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

person Ray    schedule 03.08.2008