#486906 - 04/02/2019 14:16:14
a Minha Aplicação VB.NET , para rodar plenamente necessita de rodar como ADM.
acessar registro do Windows, trocar arquivos na rede, gravar e apagar na pasta do APP ( arquivos de programas entre outros)
para isso acrescentei arquivo manifesto com essa linha, O usuário tem que ser ADM ou com privilégios de ADM
tudo funciona perfeitamente , até um cliente ter a necessidade que algumas maquinas rodasse com usuário limitado.
como configurar para que algumas maquinas rodem como ADM e outras ( nível hierárquico inferior) rodem como usuário simples.
usuários administrativos, usam recursos, como Transferência de arquivos com o servidor, Emissão de NF-E ( acessa registro do Windows para configuração) e geralmente logam como ADM.
ja usurários, simples como produção, almoxarifado, expedição entre outros. o sistema não tem necessidade de logar como ADM.
como base na linha do Manifesto, daria para programar e fazer facultativo?
#486915 - 05/02/2019 08:21:24
Por questões de segurança realmente você terá limitações, pois imagina se alguém faz um vírus e força ele para rodar como administrador apenas alterando uma linha de comando, seria um caos neh, não me recordo até aonde são as limitações do "requestedExecutionLevel" mas deve algo com a UAC do Windows enfim.
- Se for realmente necessário mexer no registro do Windows use a chave HKEY_CURRENT_USER ela é criada para cada usuário e ele tem acesso a realizar alterações.
HKEY_LOCAL_MACHINE -> É utilizada para o computador como um todo e por isso você tem limitações, pois ao alterar algo aplica a todos os usuários.
Eu ainda acho que deveria mudar a lógica do seu sistema, armazenando os parâmetros no banco de dados ou até mesmo no APP.CONFIG para evitar esse tipo de problema.
Coloque os parâmetros de comunicação com o banco de dados no app.config e os parâmetros do sistema leia direto no BD.
#486916 - 05/02/2019 09:06:59
Bom dia, Alevale,
funciona, a linha <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> funciona perfeitamente.
eu quero é uma maneira de fazer isso parametrizável.
ha maquina que necessito que rode como ADM e outras com usuário Comum.
#486917 - 05/02/2019 09:19:41
Eu só mando a cada cliente definir no atalho ou .exe rodar como adm, é quebra galho mas funciona.
#486918 - 05/02/2019 10:00:24
Um programa desse tipo no geral nunca deveria precisar de permissão de administrador, no máximo seria na hora de instalar uma atualização.
Você pode por exemplo colocar as configurações que precisa fazer no registro em um programa separado, se você precisa ficar mudando elas o tempo todo então isso é um erro e você deveria ver como não precisar fazer isso o tempo todo, geralmente configurações no HKEY_LOCAL_MACHINE devem ser feitas apenas durante a instalação do programa.
Arquivos na pasta do programa nunca deveriam ser alterados, os programas devem criar um pasta dentro do AppData para gravar arquivos que ele precise para funcionar, dentro do Arquivos de Programas devem ficar apenas arquivos que nunca são alterados.
De mais você pode deixar o seu programa sem essa alteração no manifest pra ele poder executar normalmente e usar uma biblioteca tipo o UACHelper pra te ajudar a verificar se está rodando com privilégios elevados, se não reiniciar o programa pedindo a elevação de privilégios, no caso dessa biblioteca ela tem um método chamado StartElevated pra executar um programa como ADM.
Só tem que ver que você tem que realmente reiniciar o programa pra elevar ele, ele roda inicialmente sem permissão de ADM, então você decide iniciar uma nova instância com permissões elevadas e fecha a anterior no seu código.
#486932 - 05/02/2019 14:25:44
eu faço isso pelo inno setup nao sei se ajuda em qualquer coisa talvez haja alguma forma de colocar um parâmetro no inno para escolha
Root: "HKCU"; Subkey: "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; ValueType: "string"; ValueName: "C:\SISTEMA BORDADO\ideiaslogo.exe"; ValueData: "WINXPSP3 RUNASADMIN";
Root: "HKCU"; Subkey: "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; ValueType: "string"; ValueName: "C:\SISTEMA BORDADO\ideiaslogo.exe"; ValueData: "RUNASADMIN";