windows 7 - onde e como posso armazenar dados independentes do usuário de máquina?

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu tenho um aplicativo (32 bit c ++) em execução no XP que eu preciso para se adaptar a ser executado em Windows 7 e Vista. Ele precisa armazenar algumas dezenas de bytes de um lugar de dados independente do usuário. Sob XP, eu armazenados os dados no Registro em HKEY_LOCAL_MACHINE \ Software. Quando eu executar o aplicativo no Windows 7 as entradas do Registro são virtuais-ized e cada usuário recebe uma cópia separada dos dados.

O registro não-virtual-ized parece ser um lugar lógico para os dados, mas não tenho idéia de como proceder para fazê-lo. Faço notar que há uma infinidade de aplicações que realmente armazenam os dados lá; como é que eles vão fazer sobre isso?

Eu também estou disposto a armazenar os dados mais onde, é que há alguns bem sei repositório global para isso? Um arquivo único e pequeno é tudo necessidade I.

Eu sou mais ou menos ignorantes do negócio de direitos inteiros / privilégios de modo que qualquer sugestões, ponteiros, etc muito apreciada.

Foi útil?

Solução

Um dos objetivos do projeto de Windows 7 é para os dados do usuário isolar e aplicações. Isso é para melhorar a privacidade, segurança e personalização. Na verdade, os usuários padrão em Win 7 não pode alterar os dados de outros usuários.

Os locais padrão para dados de aplicativo de armazenamento é devolvido pelo System.Environment.SpecialFolder enumeração. Note que nem todas as pastas são lidos ou escritos por todos os usuários. Por exemplo, CommonApplicationData pode ser lido por todos os usuários, mas apenas gravável por aqueles com uma política adequada, como Administradores.

Se você absolutamente deve ter dados que são compartilhados entre os usuários, um administrador ou um com permissão deve instalá-lo em um local compartilhado. Se os usuários precisam atualizar esses dados, eles devem copiá-lo para um local que pode escrever para, como ApplicationData, e atualizar suas próprias cópias privadas. Esta cópia privada não podem ser alteradas por outros usuários. Você não deverá instalar dados para locais compartilhados a menos que seu aplicativo não funcionará contrário.

De fato, em Win7 você deve instalar todos os aplicativos e dados para a sessão iniciada pastas de aplicativos e dados do usuário, e não para locais compartilhados. Se vários usuários instalar o aplicativo, cada usuário terá sua própria cópia do pedido e os dados. Isso é quase sempre o que você quer. Se vários usuários estão executando um aplicativo ou jogo, você não quer um usuário mudando todos os outros. Se vários usuários realmente precisam a mesma mudança, que cada usuário atualizar sua cópia privada quando eles precisam. Se a conta de um usuário é cortado ou voltas mal, você não quer destruir todos os outros é aplicações e dados.

Também estar ciente de que em Win7, os usuários podem fazer logon em uma máquina remotamente, por isso não é uma boa idéia para dados específicos da máquina loja, como resoluções de tela ou endereços IP, por usuário. Em vez disso, verificar isso cada vez que seu aplicativo é executado.

Outras dicas

IMHO, é razoável pensar que muitas pessoas estão indo ter usuários individuais instalar suas próprias cópias de um pacote de software. Na verdade, muitos pacotes não será instalado a menos que eles são feitos sob ADMIN (ALLUSERS = 1). Se os meios razoáveis ??para facilitar todo o sistema instala em algum nível de proteção menos de administrador não são fornecidos, instalações de nível ADMIN continuará a ser a norma.

Por exemplo, por que não algum usuário não administrativo (com privilégios de intermediários) instala ser autorizados a criar chaves de registro em alguma parte restrita do Registro (HKLM \ SOFTWARE \ pacote) e diretórios em todas as utilizadoras \ Application Data \ pacote?

Eu decidi fazer uma ADMIN exigido (ALLUSERS = 1) .msi e criar chaves de registro com proteção modificado.

Assim, em uma situação onde o meu cliente tem uma estação de trabalho dedicada a nossa aplicação (que deriva dados de um bom e velho arquivo INI que iremos r + w a) a nossa mensagem para sua equipe de TI é que eles precisam para instalar -lo na mesma máquina para cada usuário que eles têm?

Precisamos de leitura / gravação para (no Windows 7 / Vista): Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData) + @ "\ GoScan \ GoScan.ini"

mas como outros de ter descoberto as permissões para um usuário típico não é suficiente para r + w. É uma prática "aceitável" para alterar as permissões do diretório / arquivo após o instalador é feito ou talvez durante a instalação (não sei onde fazer isso em VS 2008 projeto de instalação).

-Paul

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