[Java] Read/write access

Pagina: 1
Acties:

Onderwerpen


  • Niekfct
  • Registratie: Maart 2008
  • Laatst online: 14-10 14:32
Hoi

Ik ben een java applicatie aan het maken, die de gebruikersvoorkeuren opslaat naar een bestand. Bij het starten leest hij het bestand in, bij het afsluiten schrijft hij het bestand.
Bij mij zelf heb ik geen problemen, maar bij een ander wordt er een IOException gegooid met het bericht "toegang geweigerd".

Nu lijkt mij dat het komt omdat de applicatie niet met adminrechten gedraaid wordt (schrijven van files heeft adminrechten nodig neem ik aan).

Als ik een beetje rondgoogle vind ik wel allemaal dingen waarmee je kunt checken of je de rechten hebt, en dat je via batchbestanden de adminrechten kunt doorgeven.
Dit is voor een normale gebruiker natuurlijk niet handig.

Dus de vraag: Hoe kan ik .jar bestanden als admin runnen? Kan ik bestanden schrijven zonder adminrechten? Kan ik in de applicatie om adminrechten vragen? Of is er een heel andere methode om dit (lezen, schrijven) voor elkaar te krijgen?

Het gaat in eerste instantie om windowssystemen.

Dear Sir/Madam, Fire! Fire! Help me! Looking forward to hearing from you.


  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 14-10 14:44

Salandur

Software Engineer

je schrijft waarschijnlijk bestanden weg in de directory van waaruit je programma gestart is. Hiervoor heb je waarschijnlijk admin rechten nodig. Je kan beter het bestand wegschrijven in de user dir, waar de gebruiker altijd rechten heeft om het een en ander aan te maken en weg te schrijven.
een programma dat admin rechten nodig heeft om te draaien is imho not done en levert alleen maar meer problemen op dan het probeert op te lossen.

Assumptions are the mother of all fuck ups | iRacing Profiel


  • Standeman
  • Registratie: November 2000
  • Laatst online: 07:15

Standeman

Prutser 1e klasse

In principe heb je geen admin rechten nodig om te lezen / schrijven in een bestand, maar moet wel de gebruiker die de app start de rechten hebben om dat te doen (of dat nou admin is of guest, maakt niets uit).

Ik denk ook dat je daar naar moet gaan kijken en niet naar je app, tenzij je app de data op wilt slaan in 1 of andere vage folder zoals C:\windows\system32 ofzo.
Als je gewoon voor die voorkeuren de home.dir gebruikt zou je geen problemen met rechten moeten hebben.

The ships hung in the sky in much the same way that bricks don’t.


  • SKiLLa
  • Registratie: Februari 2002
  • Niet online

SKiLLa

Byte or nibble a bit ?

Misschien kun je je beter richten de bestandslokaties waarin je als non-admin wel mag schrijven (desktop / mijn documenten / %appdata% / etc.).

Je kan eventueel de commandline voor het opstarten van de .jar file opslaan als .cmd bestand en dan via de eigenschappen van dat .cmd bestand 'run as administrator' aanvinken; maar dat is een lelijke workaround ...

'Political Correctness is fascism pretending to be good manners.' - George Carlin


  • Niekfct
  • Registratie: Maart 2008
  • Laatst online: 14-10 14:32
Dit wordt inderdaad in die directory geschreven. Dat van de user dir is eigenlijk best logisch, dus ga ik dat even proberen.
Inderdaad, programma's die adminrechten nodig hebben krijgen veelal kritiek, dus dat zou ik het liefst willen vermijden.
SKiLLa schreef op donderdag 30 december 2010 @ 15:16:
Je kan eventueel de commandline voor het opstarten van de .jar file opslaan als .cmd bestand en dan via de eigenschappen van dat .cmd bestand 'run as administrator' aanvinken; maar dat is een lelijke workaround ...
Ja zulke oplossingen had ik al gevonden, maar vond ik ook lelijk, dus vandaar deze vraag ;-)

[ Voor 46% gewijzigd door Niekfct op 30-12-2010 15:21 ]

Dear Sir/Madam, Fire! Fire! Help me! Looking forward to hearing from you.


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Niekfct schreef op donderdag 30 december 2010 @ 15:18:
Inderdaad, programma's die adminrechten nodig hebben krijgen veelal kritiek, dus dat zou ik het liefst willen vermijden.
En terecht, 99% van de programma's heeft het ook helemaal niet nodig.

offtopic:
Jammer alleen dat voor die user dir vaak de Mijn Documenten-folder wordt misbruikt in plaats van één map hoger en dan AppData\$Fabrikant.

Ik heb van alle Visual Studio's, games en andere programma's folders in m'n Mijn Documenten staan die ik, noch het programma ooit gebruiken. Je kunt ze verwijderen, maar na een herstart van de applicatie staan ze er weer. ;(

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Niekfct
  • Registratie: Maart 2008
  • Laatst online: 14-10 14:32
CodeCaster schreef op donderdag 30 december 2010 @ 15:20:
offtopic:
Jammer alleen dat voor die user dir vaak de Mijn Documenten-folder wordt misbruikt in plaats van één map hoger en dan AppData\$Fabrikant.

Ik heb van alle Visual Studio's, games en andere programma's folders in m'n Mijn Documenten staan die ik, noch het programma ooit gebruiken. Je kunt ze verwijderen, maar na een herstart van de applicatie staan ze er weer. ;(
En daarom gebruik in de mijn documenten folder ook niet meer, maar je herinnert me er nu wel aan dat ik niet hetzelfde moet gaan doen :)

Dear Sir/Madam, Fire! Fire! Help me! Looking forward to hearing from you.


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Voor wat ik zo snel kan vinden moet je dan de SHGetKnownFolderPath met FOLDERID_LocalAppData als eerste argument aanroepen in Shell32.dll. Maar het zou ook heel goed kunnen dat dat in Java makkelijker en platformonafhankelijk kan.

Zoiets bijvoorbeeld:
Java:
1
System.getProperty("user.home"));



Punt blijft wel, al is het mosterd na de maaltijd:
Bij mij zelf heb ik geen problemen, maar bij een ander wordt er een IOException gegooid met het bericht "toegang geweigerd".
Dan moet je gaan loggen en debuggen. Waar wordt het bestand opgeslagen en waarom mag dat niet.

[ Voor 40% gewijzigd door CodeCaster op 30-12-2010 15:30 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Niekfct
  • Registratie: Maart 2008
  • Laatst online: 14-10 14:32
CodeCaster schreef op donderdag 30 december 2010 @ 15:26:
Voor wat ik zo snel kan vinden moet je dan de SHGetKnownFolderPath met FOLDERID_LocalAppData als eerste argument aanroepen in Shell32.dll. Maar het zou ook heel goed kunnen dat dat in Java makkelijker en platformonafhankelijk kan.

Zoiets bijvoorbeeld:
Java:
1
System.getProperty("user.home"));



Punt blijft wel, al is het mosterd na de maaltijd:

[...]

Dan moet je gaan loggen en debuggen. Waar wordt het bestand opgeslagen en waarom mag dat niet.
Ik had hem ook al gevraagd, stuur me het logfile. Maar het programma had geen rechten om te schrijven, dus was er geen logfile. :/
Ik heb System.getenv("APPDATA") gevonden, dat verwijst naar de appdata/roaming map.

Dear Sir/Madam, Fire! Fire! Help me! Looking forward to hearing from you.


  • ErikKo
  • Registratie: Mei 2009
  • Laatst online: 22:41

ErikKo

Rippie

For example, you could grant permission to an applet to perform normally forbidden operations such as reading and writing local files or running local executable programs.
Leesvoer

:)

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Wie zegt dat het over een applet gaat? De TS zegt toch duidelijk dat het over een Java applicatie gaat?

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

  • ErikKo
  • Registratie: Mei 2009
  • Laatst online: 22:41

ErikKo

Rippie

"For example, ...". Het wordt niet beperkt tot een applet, dat was enkel een voorbeeld. :/

Acties:
  • 0 Henk 'm!

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 14-10 12:42

NetForce1

(inspiratie == 0) -> true

ErikKo schreef op vrijdag 31 december 2010 @ 13:02:
"For example, ...". Het wordt niet beperkt tot een applet, dat was enkel een voorbeeld. :/
Maar als de gebruiker geen rechten heeft om in een bepaalde map te schrijven gaat het signen van een jar je echt niet verder helpen.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Acties:
  • 0 Henk 'm!

  • Niekfct
  • Registratie: Maart 2008
  • Laatst online: 14-10 14:32
Het opslaan van de voorkeuren naar de userdir werkt goed.
Bij 'die ander' kan er nu ook geschreven worden.

Bedankt voor de reacties!

Dear Sir/Madam, Fire! Fire! Help me! Looking forward to hearing from you.


Acties:
  • 0 Henk 'm!

  • ErikKo
  • Registratie: Mei 2009
  • Laatst online: 22:41

ErikKo

Rippie

Natuurlijk altijd handig als je de oplossing deelt met ons, mochten mensen op dit topic stuiten tijdens een zoekopdracht.
Pagina: 1