Visual Basic.NET - OpenFileDialog no abre archivo de directorios con restricción de permisos de seguridad

 
Vista:
Imágen de perfil de Harold

OpenFileDialog no abre archivo de directorios con restricción de permisos de seguridad

Publicado por Harold (18 intervenciones) el 26/04/2017 03:45:53
Hola muy buenas noches;

Probando una aplicación prototipo que estoy realizando, y probando varias funcionalidades de la misma, me he encontrado con una inquietud. Resulta que al tratar de abrir un archivo de mi aplicación por medio de la opción Abrir, o desde el explorador de windows(previamente ya he registrado la aplicación con su extensión en el equipo), por ejemplo si el archivo que esta ubicado en el Disco local C, no lo abre.

Investigando, observo que tiene que ver por que hay ciertos directorios que por temas de seguridad el sistema operativo restringe el control de acceso, y que que para que mi aplicación pueda acceder a esos archivos, debo hacer uso de las clases FileIoPermissions, FileSecurity, nose si deben usarse otra más.

He declarado este método para probar:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Permiso_archivo_disco_Read(ByVal path As String)
        Try
            'Se realiza un llamado de acceso a leer en la ruta de acceso.}
            '
            Dim file_permissions As New FileIOPermission(FileIOPermissionAccess.Read, path)
            '
            'Se forza a que se permita la escritura en el directorio.
            file_permissions.Demand()
            '
        Catch ex As Security.SecurityException
            '
            'Se muestra un mensaje con la excepción encontrada.
            XtraEditors.XtraMessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
            '
        Catch ex As IOException
            '
            'Otro tipo de errores.
            XtraEditors.XtraMessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
            '
        End Try
    End Sub

En el evento Click del botón Abrir, tengo implementado el siguiente código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Private Sub bbi_abrir_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbi_abrir.ItemClick
 
        'Ruta del archvo que desea abrir.
        Dim fileName As String = String.Empty
        'Nombre del archivo que desea abrir, sin la ruta.
        Dim nameFile As String = String.Empty
 
        ' Seleccionamos un archivo para abrir.
        '
        Using ofd As New OpenFileDialog()
            ofd.Filter = "Archivos del proyecto(.exa)" & "|*.exa|Todos los archivos|*.*"
            Dim dr As DialogResult = ofd.ShowDialog()
            If (dr <> DialogResult.OK) Then Return
            fileName = ofd.FileName
            nameFile = ofd.SafeFileName
        End Using
 
        Try
            ' El archivo no se encuentra abierto por otro proceso diferente.
            '
            ' Iniciamos una nueva instancia de la aplicación. Para ello le
            ' especificamos al constructor del objeto ProcessStartInfo la
            ' ruta completa del ejecutable de la aplicación.
            '
            '
            'Se pasa el argumento, que corresponde al archivo que se desea abrir. 
            'Obtenemos la ruta de acceso del archivo a abrir, tenienco en cuenta de que el nombre del archivo
            'o las carpetas pueden tener espacios en blanco y/o caracteres alfanuméricos, que necesitan enviarse
            'a la línea de comandos entre comillas dobles para que se pueda leer correctamente. Se hace uso de Chr(34)
            'que inserta las comillas dobles al inicio de la ruta y al final. Por ejemplo el archivo se llama Ejemplo 23
            'y sino se hace uso de las comillas dobles al inicio y al final sólo leería E.
            Dim startInfo As New ProcessStartInfo(Application.ExecutablePath) With
            {
                .Arguments = String.Format("{0}", Chr(34) & System.IO.Path.GetFullPath(fileName) & Chr(34))
            }
 
            'Iniciamos una nueva instancia de la aplicación.
            Process.Start(startInfo)
 
        Catch ex As Exception
 
            ' Se ha producido un error.
            'Ojo puede darse el caso de intentar abrir un archivo con una secuencia vacìa.
            'Ojo puede darse el caso de intentar abrir un archivo con una secuencia vacìa.
            XtraEditors.XtraMessageBox.Show(ex.Message, ex.GetType().FullName,
                                                     MessageBoxButtons.OK, MessageBoxIcon.Error)
 
        End Try
 
    End Sub

Mi duda está, en que en el evento Click del botón Abrir, luego de que verifico*:

1
If (dr <> DialogResult.OK) Then Return

*implementé el método Permiso_archivo_disco_Read, pero no funciona. ¿Cuál es entonces el procedimiento para permitir abrir archivos de directorios con restricciones de seguridad?. Yo tengo que luego desearilziar dicho archivo, y cargarlo a una instancia de mi aplicación, cuestión que no sucede.

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder