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

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

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

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

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

Ответы

Ответ 1

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

При этом можно изменить другие пользователи. Ключи через 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

(Код любезно предоставлен Jeroen Ritmeijer)

Ответ 2

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

ЗДЕСЬ ДРАКОНЫ

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

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

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

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

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

Ответ 3

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

Пользователь /Machine Hive
Подключи и значения, введенные в этом кусте, будут установлены в кусте HKEY_CURRENT_USER, когда пользователь выбирает "Просто я" или куст HKEY_USERS, или когда пользователь выбирает "Все" во время установки.

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

Ответ 4

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

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