Pergunta

Estou tentando manter um projeto de configuração em Visual Studio 2003 (sim, é um aplicativo legado).O problema que temos no momento é que precisamos escrever entradas de registro para HKCU para cada usuário no computador.Eles precisam estar no HKCU em vez de HKLM porque são as configurações padrão do usuário e mudam por usuário.Meu sentimento é que

  1. Isso não é possível
  2. Isso não é algo que o instalador deveria fazer, mas algo que o aplicativo deveria fazer (afinal, o que acontece quando um perfil de usuário é criado após a instalação?).

Pensando nisso, ainda quero alterar o mínimo possível no aplicativo, então minha dúvida é: é possível adicionar entradas de registro para cada usuário em um Visual Studio 2003 projeto de configuração?

E, no momento, o projeto lista cinco chaves raiz de registro (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, e Hive de usuário/máquina).Eu realmente não sei nada sobre a chave raiz dos usuários e não vi o User/Machine Hive.Alguém pode me esclarecer sobre o que são?Talvez eles pudessem resolver meu problema acima.

Foi útil?

Solução

Primeiro:Sim, isso é algo que pertence ao Aplicativo exatamente pelo motivo que você especificou:O que acontece depois que novos perfis de usuário são criados?Claro, se você estiver usando um domínio, é possível colocar algumas coisas no registro durante a criação, mas esse não é realmente um caso de uso.O aplicativo deve verificar se há seetings e usar as configurações padrão caso não haja.

Dito isto, é possível alterar as chaves de outros usuários através do Hive HKEY_USERS.

Não tenho experiência com o Projeto de Instalação do Visual Studio 2003, então aqui está um pouco de código VBScript (totalmente não relacionado) que pode lhe dar uma ideia de onde procurar:

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

(Código cortesia de Jeroen Ritmeijer)

Outras dicas

Suponho que, porque você deseja configurá-lo para todos os usuários, você está em algum tipo de computador compartilhado, que provavelmente está sendo executado em um domínio.

AQUI ESTÃO DRAGÕES

Digamos que Joe e Jane façam login regularmente no computador, então cada um deles terá 'registros'.

Em seguida, você instalará seu aplicativo e o instalador empregará hacks gigantes e coisas nojentas para definir itens no HKCU para eles.

ENTÃO, Bob virá e fará logon (ele e outras 500 pessoas têm contas no domínio e podem fazer isso).Ele nunca usou este computador antes, então não tem registro.Na primeira vez que ele faz login, o Windows cria uma para ele, mas ele não terá sua configuração.

Seu aplicativo então falha ou se comporta incorretamente, e Bob reclama em voz alta sobre os produtos de baixa qualidade da Raynixon incorporados.

A resposta correta é ter apenas algumas configurações padrão em seu aplicativo, que podem gravá-las no registro se não as encontrar.É uma boa prática geral que seu aplicativo nunca dependa do registro e crie coisas conforme necessário, para qualquer entrada de registro, não apenas HKCU, de qualquer maneira

Apesar do que Artigo MSDN Arquivo de artigo do MSDN diz sobre User/Machine Hive, ele não grava em HKEY_USERS.Em vez disso, ele grava no HKCU se você selecionar Just Me e no HKLM se você selecionar todos.

Então minha solução será usar o User/Machine Hive, e depois na aplicação ele verifica se as entradas do registro estão no HKCU e se não, copia-as do HKLM.Eu sei que esta provavelmente não é a maneira ideal de fazer isso, mas tem menos alterações.

Estou no meio da minha solução com esta entrada no MSDN (não sei como não consegui encontrá-la antes).

Hive de usuário/máquina
As subchaves e os valores inseridos nesta seção serão instalados na seção HKEY_CURRENT_USER quando um usuário escolher "Just Me" ou na seção HKEY_USERS ou quando um usuário escolher "Todos" durante a instalação.

Editor de registro Arquivo de artigo do MSDN

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top