Проект установки Visual Studio — настройки реестра для каждого пользователя

StackOverflow https://stackoverflow.com/questions/810

Вопрос

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

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

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

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

Это было полезно?

Решение

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

При этом МОЖНО изменить ключи других пользователей через куст 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top