Pergunta

Eu estou tentando construir um instalador do Windows usando Nullsoft Install System que requer a instalação por um administrador. O instalador faz uma "logs" diretório. Como os usuários regulares podem executar este aplicativo, esse diretório precisa ser gravável por usuários regulares. Como faço para especificar que todos os usuários devem ter permissão para ter acesso de gravação para esse diretório na linguagem de script NSIS?

Eu admito que isso soa um como uma espécie de má idéia, mas a aplicação é apenas um aplicativo interno usado por apenas algumas pessoas em uma rede privada. Eu só preciso os arquivos de log salvos para que eu possa ver por que o aplicativo é quebrado se algo de ruim acontece. Os usuários não podem ser feitas administrador.

Foi útil?

Solução

Use a AccessControl plugin e, em seguida, adicione ao script, onde os "logs" diretório está no diretório de instalação.

AccessControl::GrantOnFile "$INSTDIR\logs" "(BU)" "FullAccess"

que dá acesso completo para a pasta para todos os usuários.

Outras dicas

AccessControl::GrantOnFile "<folder>" "(BU)" "FullAccess" não funcionou para mim em uma máquina Windows Server 2008. Em vez disso eu tive que usar este:

AccessControl::GrantOnFile "<folder>" "(S-1-5-32-545)" "FullAccess"

S-1-5-32-545 é equivalente a "Usuários" de acordo com http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q243330

Em vez de mudar as permissões em diretórios sob Arquivos de Programas, por que não colocar os logs em um local que é gravável por todos os usuários.

Veja a seção 4.9.7.7 SetShellVarContext na documentação do NSIS. Você pode usá-lo com $ APPDATA para obter os dados do aplicativo pasta que é gravável para todos os usuários.

É uma questão de idade, mas agora como sugerido pelo diretório Sören APPDATA é uma boa maneira de fazer o que quiser, a coisa é: Não tome APPDATA personnal do usuário, mas o "Todos os usuários" dir APPDATA! Desta forma, ninguém será capaz de acessar o arquivo de registro; -)

Além disso, eu li em algum lugar que o uso (BU) na GrantOnFile não está a funcionar bem com alguns sistemas (Win 7 x64 se me lembro bem), talvez você deve usar o SID "(S-1-5-32-545 )" em vez (é SID os todos os usuários, este valor é uma constante em cada sistema operacional Windows)

Uma maneira: chamar o shell, e usar cacls ou xcacls .

Por que não criar um log-diretório em% directório% APPDATA do usuário? Você realmente precisa colocar todos os logs no diretório de instalação? Por quê?

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