Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

C# - Schrijfrechten normale gebruiker

Pagina: 1
Acties:

  • Jorijn
  • Registratie: Mei 2006
  • Laatst online: 28-11-2024
Hallo,

Ik probeer via een Image object te schrijven naar een bestand via de code:

C#:
1
2
Image rImage = new Image();
rImage.Save(@"C:\Bestand.png", ImageFormat.Png);


Deze code gooit dus een exception met fout:
Er is een generieke foutmelding opgetreden in GDI+
Na lang gissen en zoeken kwam ik er achter dat naar mijn homefolder schrijven dus wel kon. Iemand enig idee hoe ik dit kan omzeilen of moet ik de rechten maar gewoon opgedwongen krijgen..

Jorijn

PSN: Jorijnn


  • Depress
  • Registratie: Mei 2005
  • Laatst online: 11-11 11:26
Gebruikers met beperkte rechten hebben nooit schrijfrechten(of in iedere geval niet overal).
Vandaar dat veel programma's administrator rechten nodig hebben.

Ik vermeld daarom altijd bij mijn applicaties, Administrator Rechten vereist. Er is zover ik weet ook geen work-around.. :-(

[ Voor 8% gewijzigd door Depress op 04-04-2008 17:49 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:48
Depress schreef op vrijdag 04 april 2008 @ 17:49:
Gebruikers met beperkte rechten hebben nooit schrijfrechten(of in iedere geval niet overal).
Vandaar dat veel programma's administrator rechten nodig hebben.

Ik vermeld daarom altijd bij mijn applicaties, Administrator Rechten vereist. Er is zover ik weet ook geen work-around.. :-(
Dat je niet overal schrijfrechten hebt, heeft wel z'n bedoeling. Admin rechten vereisen is geen optie. Ik vind: doe het dan goed en schrijf je dingen weg waar ze normaal gezien moeten komen. Iets wegschrijven in de root van een disk is gewoon imho not done als het om een 'end user app' gaat.

Wat als meerdere gebruikers diezelfde app gebruiken bv ?
Schrijf je dingen weg in de home-directory van de gebruiker, of in een ander daartoe bestemde plaats.

Wat me wel vreemd lijkt, is de exceptie die je krijgt; als het echt om een rechtenprobleem gaat, dan zou ik toch een andere exceptie verwachten.
Kan je eens debuggen, en zien wat de InnerException is ?

ps: over welk OS gaat het hier ?

[ Voor 12% gewijzigd door whoami op 04-04-2008 17:55 ]

https://fgheysels.github.io/


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
whoami schreef op vrijdag 04 april 2008 @ 17:54:
[...]
Dat je niet overal schrijfrechten hebt, heeft wel z'n bedoeling. Admin rechten vereisen is geen optie. Ik vind: doe het dan goed en schrijf je dingen weg waar ze normaal gezien moeten komen. Iets wegschrijven in de root van een disk is gewoon imho not done als het om een 'end user app' gaat.
Helemaal eensch.
whoami schreef op vrijdag 04 april 2008 @ 17:54:
[...]
Wat me wel vreemd lijkt, is de exceptie die je krijgt; als het echt om een rechtenprobleem gaat, dan zou ik toch een andere exceptie verwachten.
Ik heb 't zo snel niet bij de hand, maar ik kan me herinneren het ook meegemaakt te hebben; dan gooit de GDI de exeptie (met idd als inner exception een permission denied dinges).

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Jorijn
  • Registratie: Mei 2006
  • Laatst online: 28-11-2024
whoami schreef op vrijdag 04 april 2008 @ 17:54:
[...]
ps: over welk OS gaat het hier ?
Vista, helaas :P

Ik geef de eindgebruiker een directory select dialoog waarin ze dus elke directory kunnen kiezen. In de partitie root was enkel een voorbeeld.

Hoe kan ik ze dan zo'n mooi UAC dialoog geven in plaats van die nare exceptie? :)

Jorijn

PSN: Jorijnn


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:48
Wordt dat niet bepaald door de ACL's ?
En kan je dan bijgevolg niets doen met de Directory.GetAccessControl method ?

https://fgheysels.github.io/


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Allereerst moet je inderdaad zoals whoami aangeeft bedenken waar je schrijfrechten nodig hebt. Normale (lees: geen systeem utilities) welke administrator rechten nodig hebben verdwijnen bij mij direct in de prullenbak.

Een UAC dialog wordt alleen gegeven als de applicatie zelf aangeeft welke rechten het nodig heeft. De zogenaamde attribute hints. Ook het .met framework heeft daarvoor mogelijkheden (staat overigens los van vista). In vista zijn alle instellingen 'neutraal'. Er is dus nog geen bevestiging of 'iets' mag of niet. Echter zomaar proberen een bestand in de C; te schrijven zorgt natuurlijk niet voor een popup. Echter als je het FileIOPermission attribute (of class als de bestandsnaam dynamisch is) zou gebruiken dan krijg je de UAC dialog wel want dan verzoek je om die rechten.
C#:
1
[assembly: FileIOPermission(SecurityAction.RequestMinimum, All="C:\image.png")]


Echter de juiste manier voor jouw om je image weg te schrijven is:
C#:
1
2
3
4
5
6
string dir = Path.Combine( Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData ), "MyApp" );
if (!Directory.Exists(dir))
    Directory.Create(dir);

string filename = Path.Combine(dir, "image.png");
//call save method

Echter images horen van nature eigenlijk thuis in de SpecialFolder.MyPictures of SpecialFolder.MyDocuments. In beide folders mogen subdirectories worden aangemaakt.

Een aantal maanden geleden heb ik het boek 'C# Windows desktop development for Microsoft Windows Vista' gelezen. Erg leerzaam boek, behandeld zeer goed de User Access Control principes en gaat zowel in op WPF als 'classic' desktop development. Ook Windows services worden behandeld. Een aanrader voor ieder welke zich met desktop development onder windows (gaat) bezig houd(en)(t).

If it isn't broken, fix it until it is..


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-11 18:33
Niemand_Anders schreef op maandag 07 april 2008 @ 09:13:
Echter de juiste manier voor jouw om je image weg te schrijven is:
C#:
1
...
Non system utilities die mij niet de keuze geven waar ik iets weg wil schrijven verdwijnen bij mij ook in de prullenbak.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

farlane schreef op maandag 07 april 2008 @ 13:42:
[...]


Non system utilities die mij niet de keuze geven waar ik iets weg wil schrijven verdwijnen bij mij ook in de prullenbak.
In het geval van een image of document wel ja. Maar alle programma's slaan 'ergens' hun instellingen op. Dat kan in de registry sectie van de actieve gebruiker (HKCU/Software) of bijv. in application data.
Uiteraard kunnen de instellingen ook in de installatie folder worden opgeslagen. Daarbij kan 'filename' uit mijn voorbeeld ook als default in een SaveFileDialog gebruikt worden.

Een programma welke in het documents & settings gedeelte proberen een bestand weg te schrijven krijgen onder vista ook geen UAC dialog.

If it isn't broken, fix it until it is..


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-11 18:33
Niemand_Anders schreef op maandag 07 april 2008 @ 15:24:
[...]

In het geval van een image of document wel ja. Maar alle programma's slaan 'ergens' hun instellingen op. Dat kan in de registry sectie van de actieve gebruiker (HKCU/Software) of bijv. in application data.
Uiteraard kunnen de instellingen ook in de installatie folder worden opgeslagen. Daarbij kan 'filename' uit mijn voorbeeld ook als default in een SaveFileDialog gebruikt worden.

Een programma welke in het documents & settings gedeelte proberen een bestand weg te schrijven krijgen onder vista ook geen UAC dialog.
Ik heb het dan inderdaad over de situatie waar de TS nu mee zit, niet over applicatie settings oid. Default My Documents oid is goed maar als ik ergens anders mijn bestand heb opgeslagen wil ik bij voorkeur de keer daarna diezelfde map als default. Niets is zo irritant als 300x per dag van My Douments naar F:\Projects\.. bladeren.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Als je buiten de documents & settings folder iets wilt opslaan zal toch echt onder Vista FileIOPermission(Attribute) gebruikt moeten worden, anders krijgt de applicatie terrecht gewoon een dikke vette foutmelding van Vista. Is er geen try/catch gebruikt dan crashed de applicatie.

Heb tientallen programma's onder vista daar hun tanden daarop kapot zien bijten.

Het punt dat ik wou maken was dat echter nooit de c:\ als uitgangs punt voor het opslaan van bestanden mag worden gebruikt, terwijl het .net platform via Environment.GetFolderPath het super eenvoudig maakt om een directory op te vragen waar de gebruiker schrijfrechten heeft.

Ook bevat de MSDN trouwens ook genoeg artikelen met security topics voor desktop software. De MSDN voor Visual Studio 2008 bevat aanvullende Vista/WIN2008 updates. MSDN voor VS2005 was nog voornamelijk gericht op XP/WIN2003.

If it isn't broken, fix it until it is..


  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

ik moet leren lezen, sry

[ Voor 101% gewijzigd door ? ? op 07-04-2008 17:30 ]

Pagina: 1