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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
19
0
7 051
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

Ответ принят как подходящий

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

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

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

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

ВОТ ДРАКОНЫ

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

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

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

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

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

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

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

Другие вопросы по теме