Práce se složkami po síti - výjimka   otázka

VB.NET, I/O operace

Ve snippetu "Práce se souborovým systémem" je mj. příklad:

 If FileIO.FileSystem.DirectoryExists("c:\temp") Then
     FileIO.FileSystem.RenameDirectory("c:\temp", "temp2")
 End If

Jak ošetřit výjimku:

System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

která nastane při spuštění tohoto kódu po síti. Přejmenování složky se tedy má vykonat na počítači, na kterém kód běží (notebook), ale spuštěný je ze vzdáleného stolního počítače. Ke složce má plná oprávnění Everyone. Stejně dopadne i pokus se sdílenou složkou opět s plným oprávněním pro Everyone.

Postup spouštění je nutný, aby aplikace byla ovladatelná z řídícího počítače interaktivní tabule a tudíž i z tabule. Aplikace běží na notebooku z důvodu zachování chodu aplikace i při výpadku elektrické sítě.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Toto je klasický příklad projevu zabezpečovacího systému .NET Frameworku - CAS (Code Access Security), jehož mnohdy negativní důsledky již zde byly mnohokrát diskutovány v různých podobách.

Ve vašem případě spouštíte aplikaci ze síťového disku, což je při výchozím nastavení CAS tzv. nedůvěryhodná zóna, z čehož plyne, že systém CAS nepovolí souborové operace (mezi které patří i přejmenování složky) vaší aplikaci (aby vás ochránil před potenciálním svinstvem ze sítě) a tím pádem nastane vyjímka při volání metody RenameDirectory.

Řešením by bylo zavést do vaší aplikace Strong Name, a pro aplikace označené tímto Strong Name nastavit plnou důvěryhodnost. Profesionálně se to řeší například tak, že deklarativně vyžádáte všechna přístupová oprávnění která by mohla vaše aplikace požadovat, a pokud je některé z nich zamítnuto, nedovolíte ani aplikaci spustit. Jednodušší způsob bude nahrát aplikaci na konkrétní počítač kde bude mít automaticky plné oprávnění (protože bude pocházet z důvěryhodné zóny místního počítače).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji za vysvětlení. Vím, že se zde kolem práv řešily otázky, byl jsem i jedním z iniciátorů, Vaše vysvětlení je myslím nové. Šlo o jinou situaci, výjimky "security" se v onom případě nevyskytovaly a šlo o nastavení práv v NTFS tak, aby aplikace do složek mohla, ale její uživatel ne.

Uvedl jsem jen jednoduchý příklad. Aplikace, o kterou mi jde je samozřejmě složitější. I Strong Name jsem zkusil, možná s chybou, nepomohlo. Ale ukazuje se, že je dobře si problém lépe promyslet. Došlo mi jakmile jsem příspěvek odeslal, že se pachtím po nesmyslu. Kdyby totiž došlo k výpadku el. energie, notebook, na kterém bude aplikace umístěná, sice poběží, ale aplikace stejně spadne. Je totiž mylná představa, že aplikace spuštěná po síti běží na vzdáleném počítači. Tam je jen umístěná, pokud běží, je v paměti počítače, ze kterého byla spuštěná :-(

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Strong Name sám o sobě nestačí. Musíte ještě nastavit oprávnění pro tento Strong Name v nástroji .NET Framework Configuration Tool (Mscorcfg.msc) a to na všech počítačích, kde chcete aplikaci po síti spouštět.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback