[RESOLVIDO] Problema para gravar arquivos na pasta Arquivos de Programas (Permissão)

Olá pessoal!!

Estou em fase de conclusão de um sistema Desktop que fiz para Cadastros, Relatórios, etc… mas depois de já gerar o instalador, me surgiu um problema:

Seguinte, eu estou utilizando o JavaDB (derby) como banco de dados embarcado junto com minha aplicação, por o sistema ser bem simples optei pelo Derby…
bom, até aí tudo bem, consegui fazer tudo sem nenhuma dificuldade.

O problema, surgiu depois que eu criei o instalador…o mesmo copia todo o conteúdo (Arquivos do sistema, e a pasta do Banco de Dados) para a pasta Arquivos de Programas do Windows, só que a partir daí eu não consigo mais escrever sobre esta pasta pois é necessário permissão, ou seja, qualquer operação de insert, delete, update não funciona mais.
Quando estava desenvolvendo não tive este problema pois como meu projeto estava em uma pasta do Netbeans que fica nos arquivos do usuário, eu conseguia fazer tudo normalmente.

Acredito que para funcionar, o programa deve ser executador com a permissão de administrador do windows, como faria para executar meu .jar dessa maneira?
Alguém já passou por algum problema parecido ou sabe como ajudar?

Obrigado.

Não entendi uma coisa…

Você não consegue fazer com que o instalador copie os arquivos para o diretório “Arquivos de Programa”?

[quote=nickdofeliperibeiro]Não entendi uma coisa…

Você não consegue fazer com que o instalador copie os arquivos para o diretório “Arquivos de Programa”?[/quote]

Não, eu consigo instalar normalmente…
O problema está na hora de usar. Não consigo gravar um registro no banco, por exemplo. O banco fica na mesma pasta do programa (que fica nos Arquivos de Programas).
Meu sistema também salvas alguns arquivos, como por exemplo pdf…depois de instalado, essa função também apresentou problema.

Instala o seu banco e salva os seus arquivos em um outro diretório. :smiley:

Ahhhhhh! Execute a aplicação como administrador! Faz esse teste! :?: :?: :?:

Tinha esquecido de mencionar nos posts acima…como Administrador, entrando pelo cmd e executando o jar da minha aplicação…funcionou normalmente!!
mas preciso de algum modo fazer executar como administrador automaticamente, sem que o usuário tenha que entrar pelo cmd (imagina o trabalho :s).
Nas propriedades do arquivo .jar não encontrei a opção para sempre executar como administrador…
Será que ha algum jeito de fazer isso automatico, ou em um atalho passando algum tipo de argumento?
Andei pesquisando e achei pouco sobre o assunto, achei mais que gente ja teria encontrado esse problema :confused:

Mas obrigado pela ajuda!!

Abs!!

Olha eu não sei se ajuda, eu uso o Linux e o Win XP, então não posso te dizer se vai funcionar…

Mas existe um comando do DOS que muda a permissão dos arquivos, provavelmente essa pasta só o Sistema tem permissão sobre ela, então lá vai:

Esse comando do DOS NEGA a permissão sobre os arquivos ou pastas:

cacls c:\arquivo.txt /p Todos:N

E esse aqui, atribui a permissão de um arquivo(s) ou pasta(s) para todos os usuários:

cacls c:\arquivo.txt /g Todos:F

Quero que tente aplicar o 2° comando a pasta em questão (Arquivos de programas ?), faça isso pelo DOS mesmo…

E tem esses aqui também que pode ser bastante uteis:

//Para Ocultar, colocar somente leitura, e colocar como arquivo de sistema: Runtime.getRuntime().exec("cmd /c attrib +h +s +r C:/pasta); //Para desocultar, e tirar os atributos somente leitura e de sistema: Runtime.getRuntime().exec("cmd /c attrib -h -s -r C:/pasta);
Eu não sei se vai funcionar…mas nós vamos resolver esse problema, eu também quero aprender como se faz isso, então, se isso não der certo, conte comigo para poder solucionar esse “enigma”.

Simples! 8)

Crie um atalho para o seu jar executando-o como administrador.

Por exemplo, você pode ter o caminho do seu atalho desta maneira:

runas /user:nome_de_usuario@nome_do_computador (ou domínio) “C:\Arquivos de programas\Internet Explorer\IExplore.exe”

[quote=thunder_bolt]Olá pessoal!!

Estou em fase de conclusão de um sistema Desktop que fiz para Cadastros, Relatórios, etc… mas depois de já gerar o instalador, me surgiu um problema:

[/quote]

Refaça o instalador e ponha as coisas nos lugares corretos.

Coisas que são read-only (apenas para leitura) devem ficar na pasta de Arquivos de Programas, como você fez.

Bancos de dados e outras coisas que são read-write, e que devem ser compartilhadas por todos os usuários, devem ficar em uma pasta criada pelo instalador e que tenha permissões adequadas.

Configurações específicas do usuário devem ficar em alguma subpasta da pasta do usuário (c:\users\usuario…).

Não faça o programa rodar como administrador - é uma solução muito porca e muitas empresas não admitiriam, para usar seu sistema, uma falha tão grave de segurança.
(O Microsoft Visual Studio tem de rodar como administrador, porque precisa usar alguns recursos que realmente requerem permissões de administração, como debugar programas nativos. Mas um programa de folha de pagamento não deve de forma nenhuma rodar como administrador. )

Defina “solução porca”

(O programa da Receita Federal adotou uma solução bem porca também.
Como insistiram na idéia de deixar os dados junto com os programas, o instalador simplesmente instala tudo tudo tudo em uma pasta chamada “C:\Arquivos de Programas SRF”, que obviamente é fora de “C:\Arquivos de Programas”.
Essa pasta tem permissões para todo mundo que usa a mesma máquina poder alterar os dados à vontade.

Se quiser, pode tentar usar essa solução. Aviso que é bem porquinha também :slight_smile:

entanglement,

O problema não é na segurança. E sim, em como executar o JAR.

Não acho as soluções ruins. Será que há necessidade de se preocupar tanto com esse risco?

Alias, pense bem e como tratar a sugestão dos outros.

Você poderá um dia estar fazendo uma entrevista de emprego, e eu poderei ser seu chefe.

Um grande abraço!

Eu concordo com o entanglement que forçar um programa a rodar sempre como administrador só para acessar um banco de dados é uma solução porca.

Você abre brechas de segurança, o que pode impedir o programa de rodar em várias empresas (numa empresa, as policies do Windows podem ser definidas pelos administradores, impossibilitanto até mesmo esse atalho de funcionar).

Sem falar que, é muito mais simples, prudente e inteligente usar uma pasta pública, como a “Arquivos Comuns”, feita para isso.

ViniGodoy,

Não vejo como uma solução “porca”. Alias, jamais vi esse termo em todos os livros que me inspirei ao escrever meus artigos de mestrado para uma faculdade pública aqui do RJ.

Na verdade fui objetivo na resposta dele. A pergunta foi :

[quote]“Acredito que para funcionar, o programa deve ser executador com a permissão de administrador do windows, como faria para executar meu .jar dessa maneira?
Alguém já passou por algum problema parecido ou sabe como ajudar? [/quote]”

A google utiliza essa solução no SDK android. Inclusive, o AVD manager, roda com direitos administrativos…

Não vou nem argumentar sob essa sua gestão organizacional… De novo, me atentei a pergunta do usuário, e a respondi!
Sinceramente, ele não solicitou conselho sobre a solução que ele perguntou se era possível.

:wink:

Olha, eu acho que devíamos ouvir a voz da experiência, o ViniGodoy e o entanglement falaram essas coisas porque com certeza “conhecem um pouquinho”.

As vezes tentamos fazer uma coisa de um jeito porque queremos, mas nem sempre é o melhor jeito.

Como eles disseram antes, executar como administrador pode ser uma falha de segurança muito grave.

Existem aplicações e aplicações. O AVD manager instala coisas, e faz acesso a hardware. Um programa assim realmente necessita de privilégios.
Agora, dar nível de administrador simplesmente para acessar um banco de dados?

Quando um autor escreve artigos ou livros, ele não usa termos tão diretos. Ele diz “delegante”, “inseguro” ou outros termos menos explícitos.
Você deve ter visto esse tipo de termo várias vezes.

Aliás, nem sei pq vc citou seu mestrado nessa discussão.

Mas se você nunca viu recomendações nesse sentido, permita-me adicionar uma sugestão de referência bibliográfica aos seus estudos:
http://www.microsoft.com/learning/en/us/book.aspx?id=5957&locale=en-us

Realmente é estranho ter que dar permissão de Administrador para um programa simples como esse que fiz funcionar corretamente.

De fato eu perguntei sobre como executar meu programa como administrador, pois foi o único modo que consegui fazer meu programa funcionar (abrindo o jar pelo cmd, o que é inviável). Agradeço muito a ajuda do nickdofeliperibeiro.

Por outro lado, não tinha me atentado pelo fato de a maioria do programas que instalamos em nosso computador são instalados nos Arquivos de Programas, mas pastas que são read-write geralmente ficam nas pastas públicas, que não exigem permissão, etc…

Mas enfim, resolvi seguir o conselho entanglement e do ViniGodoy e instalar as pastas nos locais apropriados.

Agradeço novamente a ajuda do nickdofeliperibeiro , do Avelino7 e claro do entanglement e do ViniGodoy.

Resolvido.