UnauthorizedAccessException cuando se ejecuta la aplicación de escritorio de la carpeta compartida

StackOverflow https://stackoverflow.com/questions/2691159

Pregunta

He creado una aplicación de escritorio utilizando VS 2008.

Al ejecutar de forma local, todo funciona bien.

compartí mi carpeta de salida (sin permitir que los usuarios de la red cambien mis archivos) y corrió mi exe Vista desde otro equipo en nuestra intranet.

Cuando se ejecuta el exe compartida, recibo "System.UnauthorizedAccessException" cuando intenta leer un archivo.

¿Cómo puedo dar permiso para que la lectura del archivo? ¿Debo cambiar el código? Debería conceder permiso a la aplicación \ carpeta en el ordenador Vista? ¿cómo?

Notas:

  • No consumo ClickOnce. la aplicación debe ser distribuido utilizando xcopy.

  • Mi marco destino de aplicación es" .Net Framework 2.0"

  • En el equipo Vista, "Panel de Control | UninstallOrChangePrograms" dice que tiene "Microsoft .Net Framework 3.5 SP1"

  • También trató de asignar la unidad de carpeta, pero no obtuvo los mismos errores, sólo que ahora el nombre del archivo es "T: \ my.ocx"

    ' ---------------------------------------------- ------------------------

    ' mi código:

    Dim src = mcGlobals.cmcFiles.mcGetFileNameOcx como secuencia ()
    Dim iostream Como Nueva System.IO.FileStream (src, IO.FileMode.Open)

    ' ---------------------------------------------- ------------------------

    Función Public Shared mcGetFileNameOcx () As String

    ' ---------------------------------------------- ------------------------

      Dim dirName As String = Application.StartupPath & "\"
      Dim sFiles() As String = System.IO.Directory.GetFiles(dirName, "*.ocx")
    
      Dim i As Integer
      For i = 0 To UBound(sFiles)
        Debug.WriteLine(System.IO.Path.GetFullPath(sFiles(i)))
        ' if found any - return the first:
        Return System.IO.Path.GetFullPath(sFiles(i))
      Next
      Return "" 
    
    End Function
    

    ' ---------------------------------------------- ------------------------

    ' La Excepción recibo:

    System.UnauthorizedAccessException: Access to the path '\\computerName\sharedFolderName\my.ocx' is denied.
      at System.IO._Error(Int32 errorCode, String maybeFullPath)
      at System.IO.FileStream.Init(...)
      at System.IO.FileStream..ctor(...)
      at System.IO.FileStream..ctor(String path, FileMode mode)
    

    ' ---------------------------------------------- ------------------------

¿Fue útil?

Solución

encontró.

Según MSDN, [FileStream Constructor (String, FileMode)]

. . . Para constructores sin un parámetro FileAccess,

  • Si el parámetro de modo está ajustado en Añadir , Comentario es el acceso predeterminado.
  • En caso contrario, el acceso se establece a ReadWrite .
.

-> mi código utilizado por defecto, con ioStream.CanWrite: = True, y no tengo Comentario permisos en la carpeta compartida

lo que añade FileAccess parámetro:

new code:
Dim ioStream As New System.IO.FileStream(srcOcx, IO.FileMode.Open, IO.FileAccess.Read) 

old code:
Dim ioStream As New System.IO.FileStream(srcOcx, IO.FileMode.Open) 

Otros consejos

A partir de .NET Framework 3.5 SP1 se le permite ejecutar una aplicación desde un recurso compartido de red. Usted no tiene que dirigirse a él, sólo hay que tenerlo instalado.

Referencias

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top