c# - ¿Por qué mi aplicación.NET falla cuando se ejecuta desde una unidad de red?
networking securityexception (6)
¿ Intentó utilizar CasPol para confiar plenamente en un recurso compartido ?
Mi aplicación .NET falla cuando se ejecuta desde una unidad de red, incluso cuando el mismo ejecutable se ejecuta perfectamente desde un disco duro local.
Intenté buscar "Confianza total" así:
try
{
// Demand full trust permissions
PermissionSet fullTrust = new PermissionSet( PermissionState.Unrestricted );
fullTrust.Demand();
// Perform normal application logic
}
catch( SecurityException )
{
// Report that permissions were not full trust
MessageBox.Show( "This application requires full-trust security permissions to execute." );
}
Sin embargo, esto no ayuda, con lo cual me refiero a que la aplicación se inicia y nunca se ingresa el bloque catch. Sin embargo, una compilación de depuración muestra que la excepción lanzada es una SecurityException causada por una InheritanceDemand. ¿Algunas ideas?
De hecho, tiene que ver con el hecho de que las aplicaciones en una ubicación de red son menos confiables que en su disco duro local (debido a la política predeterminada de .NET Framework).
Si no me equivoco, Microsoft finalmente corrigió esta molestia en .NET 3.5 SP1 (después de que muchos desarrolladores se quejaran).
Lo busqué en google: .NET Framework 3.5 SP1 ¡Permite que el código administrado se inicie desde un recurso compartido de red!
Es posible que ya haya hecho esto, pero puede usar CasPol.exe para habilitar FullTrust para un recurso compartido de red específico.
Por ejemplo
cd c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727
CasPol.exe -m -ag 1.2 -url file:///N:/your/network/path/* FullTrust
Más información aquí .
Esta es la seguridad integrada por Microsoft en .NET Framework. Es una forma de evitar que el malware se ejecute localmente con privilegios completos, por lo que no puede cambiar esto programáticamente en el código.
Lo que debe hacer es aumentar la confianza de conjuntos específicos. Lo hace en .NET Framework Configuration (Panel de control-> Herramientas administrativas) y debe hacerlo en cada computadora.
Al igual que con cualquier medida de seguridad, es un dolor en el culo, pero ayudará al mundo a estar menos infectado, etc.
Si se trata de .NET 2.0 o superior, se creó ClickOnce para ayudar realmente con esta implementación. Solo despliego a redes compartidas usando eso.
Todo lo que tenía que hacer era marcar los archivos de solo lectura (posiblemente sin relación) y dar todos los permisos excepto el control total a los usuarios autenticados. Me encontré con este problema antes de hacerlo, cuando solo tenía la red compartida para usuarios de dominio.
Descubrí esta solución porque ni el recurso compartido de administrador (/ servidor / C $) ni las acciones de mi PC tenían este problema.
Editar: la aplicación tiene como objetivo .NET 3.5, no SP1 aquí (versión 3.5.7283)