La Web del Programador: Comunidad de Programadores
 
    Pregunta:  43032 - EXCEPTION: SYSTEM.SECURITY.PERMISSIONS.FILEIOPERMISSION
Autor:  Judas Iscariote Del Monte
Buenas,

tengo una aplicación desarrollada en Visual Basic .NET de la cual tengo los ejecutables creados y funcionan correctamente cuando los ejecuto localmente, mi problema viene cuando alojo estos ejecutables en un servidor con sistema operativo Windows 2003 Server e intento ejecutarlos remotamente, en este momento es cuando me salta la excepción System.Security.Permissions.FileIOPermission la cual dice exactamente que:
"La aplicación intento realizar una operación no permitida por la directiva e seguridad. La operación necesitaba SecurityException. Para otorgar a esta aplicación el permiso requerido pongase en contacto con el administrador del sistema o utilice la herramienta de administración de directivas de seguridad Microsoft .NET.

Si hace clic en Continuar, la aplicación pasara por alto este error e intentará seguir. Si hace clic en Salir, la aplicación se cerrara inmediatamente.

Error de solicitud de permiso de tipo
System.Security.Permissions.FileIOPermission, nombreEjecutable,
características del ejecutable."

Mas datos:
-Mi máquina local tiene Windows XP Profesional
-Mi usuario de dominio cuenta con permisos de Administrador
-Panel de control -> Herramientas administrativas -> Microsoft .NET Framework 1.1 Wizards -> Ajustar seguridad -> Intranet local, tiene asignado "plena confianza"
-Otro dato significativo: en otra maquina, tambien XP y tambien unida a este servidor la aplicación funciona correctamente accediendo a ella remotamente, la única configuración diferente que he observado es que el usuario tiene de permiso "OLAP Administrators", grupo de permisos que aparece si tienes instalado SQL server.

Si a alguien se le ocurre algo...


  Respuesta:  Esteba Mohedano
He probado lo de 'Edgar Edgar [email protected] ', pero no me funciona, y no vreo que sea el problema, porque yo tengo dos fuentes , con uno me funciona y con el otro me da el error. Solo se diferencian en que uno es una aplicacion de Windows CE, y la otra es una aplicacion de Windows.
Este es mi codigo de VB.Net 2005 y el error me lo da en

...
Try
' Buscamos cual es la ultima composturas de esta pda
->> Dim di As New DirectoryInfo(xFichero)
' Creamos una lista con los ficheros de esta carpeta
Dim fi As FileInfo() = di.GetFiles("*.JPG")
Dim fiTemp As FileInfo

For Each fiTemp In fi
nombre = fiTemp.Name
If Trim(LCase(fiTemp.Name)) <> "noimg.jpg" Then
'Pasamos por ftp los ficheros
My.Computer.Network.UploadFile(xFichero, xFtp, xUser, xPassword)
End If
Next fiTemp
Catch Ex As Exception
MsgBox(Ex.Message)
End Try

Mi mensaje es:
Error de solicitud de permiso de tipo'System.Security.permissions.FileIOPermission, mscorlib, version=2.0.0.0, Culture=neutra, PublicKeyToken=b77a5c561934e089'.

No se ya que hacer.

  Respuesta:  Edgar Edgar
Hola...

El problema es que no puedes ejecutar remotamente un sistema hecho en .NET si no tienes los permisos de seguridad... Me explico..

La seguridad de .NET usa unas directivs de seguridad, las cuales se dividen en zonas. Las mismas son:

* Equipo local
* Intranet local
* Internet

Todos los ensamblados que se ejecuten en tu equipo local se consideran "full trusted" o de plena confianza, pero lo que están en la intranet local y en internet no lo son, por lo que se restringen ciertas operaciones, entre ellas la escritura o lectura de archivos o ficheros, acceso al registro de windows. Es por esta razón que la aplicación lanza ese error

¿Cúal es la solución?, pues entrar en el Panel de Control, Herramientas Administrativas, Configuración de .NET Framework y agregar los ensamblados para que .NET confíe en ellos y te deje ejecutarlos correctamente. (Seleccionas aplicaciones, Agregar aplicación para configurar) Para esto, el ensamblado debe estar firmado (averigua un poco sobre "strong names" en .NET si no conoces de esto)

La solución que propones (usar el Wizard) no te la recomiendo puesto que le das plena confianza a cualquier aplicación basada en el Framework, asi esta aplicación tenga código potencialmente dañino

Saludos