Visual Basic.NET - Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

   
Vista:
Imágen de perfil de Harold Quntero Pineda

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Harold Quntero Pineda harpin_@hotmail.com (14 intervenciones) el 30/10/2015 17:04:29
Buenas tardes de nuevo compañeros;

Me encuentra ahora en un dilema quizás algo más pequeño(en el mundo de la serializaión), y es que no se como puedo lograr que al hacer doble clic sobre un archivo(que tiene una extensión determinada por mi, y que ya he realizado las respectivas configuraciones en Visual Studio para el instalaodor para asociar la extensión) mi aplicación lea dicho archivo al cargarse mi programa ,es decir, deserialziar dicho archivo.

Me explico mejor, ya tegno generado el instalador y asocie la extensión al registro de windows, para que cuando haga doble clic sobre el archivo, se abra mi aplicación.Pero resulta, que cuando presiono doble clic sobre el mismo, me abre mi aplicación, pero no lee los datos guardados, es decir no lo deserializa.Esto es de esperarse, ya que debo hacer un proceso para cuando se cargue la aplicación y lea dicho archivo, pero realmente no se como lograrlo.

El código que uso para desearilizar mi archivo, pero cuando lo hago desde la aplicación, presionando el botón Abrir y se abre un OpenFileDialg, es el siguiente:

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
 Private Sub Open()
 
        Dim fileName As String
 
        ' Seleccionamos un archivo para abrir.
        '
        Using ofd As New OpenFileDialog()
            ofd.Filter = "Archivos del proyecto|*.top|Todos los archivos|*.*"
            Dim dr As DialogResult = ofd.ShowDialog(Me)
            If (dr <> DialogResult.OK) Then Return
            fileName = ofd.FileName
        End Using
 
        Try
            ' Creamos una nueva instancia de la clase Persona como
            ' resultado de deserializar el archivo especificado.
            '
            Dim p As Cartera = Serialización.Deserialize(fileName)
 
            txt_longtramo.EditValue = (p.c_long_tramo)
            txt_penlong.EditValue = (p.c_pend_long)
            txt_pendtrans.EditValue = (p.c_pend_trans)
            txt_cotascada.Value = (p.c_sub_tramo)
            txt_anchovia.EditValue = (p.c_anchovia)
            che_peralte.Checked = (p.c_peraltada)
 
            txt_kminicial.EditValue = p.c_kminicial
            txt_cotainicial.EditValue = p.c_cota_inicial
 
            GridControl1.DataSource = p.cartera
 
            ' Si todo ha ido bien, guardamos en el
            ' campo la ruta del archivo abierto.
            '
            m_fileName = fileName
 
        Catch ex As Exception
            ' Se ha producido un error.
            MessageBox.Show(ex.Message)
 
        End Try
 
    End Sub

El anterior código debo modificarlo o, hacer otro procedimiento para el caso en que el usuario haga doble clic sobre el archivo guardado y se abre mi aplicación.

Espero me puedan ayudar, tal como lo han hecho.

Dios los bendiga.
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

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Miguel (354 intervenciones) el 30/10/2015 18:01:37
Hola,

Si no estoy mal eso se hace en el archivo (clase) "Program" en la función "Main(String[] args)".... Si "args" tiene valor significa que se está abriendo un archivo, si no que se está ejecutando solamente la aplicación. De "args" puedes obtener la(s) ruta(s)...



Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Harold

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Harold (14 intervenciones) el 30/10/2015 20:42:16
Hola Miguel;

Te agradecería si pudieras ayudarme de una forma más concreta al respecto, pues he quedao en las mismas.

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

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Miguel (354 intervenciones) el 31/10/2015 05:51:43
Hola,
En tu solución debe estar el archivo "Program.vb" (si no estoy mal), allí encontrarás la función "Main(args As String())" que es la que utiliza la aplicación cuando se ejecuta. Como podrás ver desde allí se inicia de tu formulario principal/inicio. Lo que debes hacer es averiguar si el parámetro "args" tiene valores, si es así significa que están abriendo un archivo (con tu extensión) desde el explorador, entonces debes recuperar la ruta del archivo y hacer la correspondiente carga.

Te trataré de colocar un ejemplo de cómo puedes cargar tus archivos. Lastimosamente no cuento con suficiente tiempo para comprobar que funcione, pero allí va:

1
2
3
4
5
6
7
8
9
10
Sub Main(args As String()) 'Entrada principal de la aplicación
   If (args = Nothing Or args(0) = Nothing) 'Vemos si se está abriendo un archivo desde el explorador
       Dim tuFormPrincipal As FormPrincipal = New FormPrincipal() 'Iniciamos la aplicación, iniciando el formulario principal o de inicio.
       tuFormPrincipal.Show()
   Else
       Dim tuFormPrincipal As FormPrincipal = New FormPrincipal() 'Iniciamos el formulario principal y cargamos el archivo, obteniendo la ruta desde "args"
       tuFormPrincipal.Show()
       tuFormPrincipal.CargarArchivo(args(0)) 'Claramente debes tener la función "Public Sub CargarArchivo(ruta As String)" en tu "FormPrincipal"
   End If
End Sub


Espero que te sirva de algo.


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Harold

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Harold (14 intervenciones) el 31/10/2015 16:06:15
Hola compañero, de antemano muchas gracias por tu respuesta.

Pero lastimosamente, no encuentro en Visual Studio 2012, el archivo "Program.vb", por tal motivo no se como hacerlo entonces. La verdad le agradeciera mucho si saca un poquieto de su valioso tiempo para ayudarme en esto, pues es lo único que me tiene estancado hasta el momento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Miguel (354 intervenciones) el 01/11/2015 15:02:30
Estimado, lamentablemente no tengo mucho tiempo en estos momentos pero te adjunto un ejemplo, está en C# pero creo no será muy difícil entenderlo e implementarlo en tu aplicación...


Saludos cordiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Miguel (354 intervenciones) el 01/11/2015 15:20:19
PD: Si necesitas ayuda para convertir algún código, o si logras tu objetivo coméntamelo..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Harold

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Harold (14 intervenciones) el 01/11/2015 15:54:42
Buenos dìas compañero;

Le agradezco mucho el querer ayudarme, pero lastimosamente no funciona lo que me dice, convertì el còdigo pero no funciona.

Ya estoy perdiendo la esperanza de poder resolver esto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Miguel (354 intervenciones) el 01/11/2015 16:25:15
Hola,
Disculpa, ¿te aseguraste de colocar todo lo que está en el archivo "Program.cs"?...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Harold

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Harold (14 intervenciones) el 01/11/2015 16:30:37
SI, compañero. Lo que pasa es que en VB.NET se usa es através de un módulo Sub Main, y con al como My.Application.CommandLineArgs(0), pero de ahí no se que más hacer:

1
2
3
4
5
6
7
8
9
10
11
Sub Main()
 
Dim arg as String= My.Application.CommandLineArgs(0)
 
If arg = Nothing orelse arg= String.Empty Then
 
Else
 
End If
 
End Sub

Es algo parecido a esto, pero realmente no se que màs debo hacer en la Soluciòn de mi proyecto, por ejemplo. Si tengo que definir líneas de comandos, etc...Cómo saber si funciona, con un ejemplo de prueba sin necesidad de crear instalador.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Miguel (354 intervenciones) el 01/11/2015 16:44:10
Para hacer pruebas, con la opción "Abrir con" (desde el Explorador) le asignas tu ejecutable a tus archivos (con tu extensión)...

Me parece que ya tienes todo lo necesario (la función Sub Main())... Ahora solamente tienes que crear (o adaptar) tu función "Open()" para cargar externamente los archivos... Algo como una función "Public Sub Open(filename As String)"...



Saludos


PD: Recuerda que en las configuraciones del proyecto tienes que asignar "Sub Main" como objeto de inicio...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Harold

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Harold (14 intervenciones) el 01/11/2015 17:22:08
Compañero, pues te voy a mostrar lo que hice:
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
Module Module1
 
    Sub Main()
 
        Application.EnableVisualStyles()
 
        'Verifico que al iniciar la aplicaciòn no se le stà pasando el paràmetro del archivo(con extensiòn)
        'Es decir, la aplicaciòn se abre de forma habitual, màs nop se quiere cargar un archivo.
 
        If My.Application.CommandLineArgs.Count = Nothing OrElse My.Application.CommandLineArgs(0) = String.Empty Then
 
            Dim frm_inicial As Form1 = New Form1
            frm_inicial.Show()
 
            'En caso contrario, se quiere cargar un archivo, por ende leo dicho file,
            'con el fin de mostrar los datos guardados en ese objeto en mi aplicación.
        Else
            Dim frm_inicial As Form1 = New Form1
            frm_inicial.CargarArchivo(My.Application.CommandLineArgs(0))
            frm_inicial.Show()
 
        End If
 
    End Sub
 
End Module

La verdad no lo he probado, pero ¿sòlo basta con eso?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Miguel (354 intervenciones) el 01/11/2015 18:23:18
Creo que con eso basta...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Harold

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Harold (14 intervenciones) el 01/11/2015 18:55:53
Compañero, te comento que me ha funcioando de maravilla, de antemano le agradezco enormemente, tenía siempre la solución pero no pensé que fuese a funcionar. Ahora tengo una pregunta, no se cómo poder hacer un punto de interrupción en la aplicación para saber que es lo que pasa y comprender ese SubMain, sin necesidad de tener que generar el instalador. Pero sabes, he encontradoun problema, pues cuando realizo el instalador con ClickOnce, y trato de haber el archivo si se abre mi aplicación pero no lo deserializa, pero en cambio si desde el explorador de archivos le digo que se abra con mi ejecutable desde mi solución si lo hace ¿ a que se debe este error, la idea es que el suario instale la aplicación y cuando haga docle clic recuperer sus datos, tal como çfunciona con todos los programas??será algo que omito en el instaldor de ClickOnce?, pero yo ya asocié la extensión dentro de Publicar de VS, cual será el error?

Cómo puedo hacer eso?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Miguel (354 intervenciones) el 01/11/2015 21:27:09
Estimando,

Te comento que esto no tiene que ver con el instalador, al menos que en éste se puedan predeterminar algún tipo de archivos para abrir con tu aplicación. Lo que se puede hacer es predeterminar la aplicación para que abra tus archivos desde el explorador..


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Harold

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Harold (14 intervenciones) el 01/11/2015 21:45:04
Hola estimado Miguel;

Le comento que cuneto con VS 2012, y si se puede relacionar una extensión con la aplicación, a través de ClickOnce. Te muestro una imagen:

1

En ella observas que asocio mi aplicación con la extensión de mi programa. Cuando genero el instalador, y hago un ejemplo de Guardar(serialzar), funciona perfectamente. El problema radica cuando intento abrirlo haciendo doble clic en el mismo, si me abre la aplicación, pero no me recupera la información(debería pues como te mostré en el Sub Main, la aplicación inicia desde dicho Sub). Pero en cambio si cambio el .exe de apertura del archivo al generrado en la carpeta bin de mi proyecto, si funciona. Te muestro la imagen:

2

Entonces que es lo que estoy haciendo mal?. Es quizás en el Sub Main?. Quizás el problema es el My.Application que uso?. Debe ser acaso AppDomain?. La verdad ahora ese es mi problema.

Te agradezco mucho, si pudieras orientarme.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Miguel (354 intervenciones) el 01/11/2015 22:21:49
Hola, es posible que tengas que elevar los permisos (lectura-escritura) a tu aplicación.

En el explorador de soluciones de Visual Studio habilita la opción "mostrar todos los archivos", luego despliega "Properties", allí estará el archivo "app.manifest" y reemplaza la línea <requestedExecutionLevel level="asInvoker" uiAccess="false" /> por <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />...


Te tendría que quedar algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- Opciones del manifiesto de Control de cuentas de usuario
             Si desea cambiar el nivel de Control de cuentas de usuario de Windows, reemplace el
             nodo requestedExecutionLevel por alguno de los siguientes.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            La especificación del nodo requestedExecutionLevel deshabilitará la virtualización de archivos y del Registro.
            Si desea usar la virtualización de archivos y del Registro para la compatibilidad
            con versiones anteriores, elimine el nodo requestedExecutionLevel.
        -->
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>



Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Harold

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Harold (14 intervenciones) el 01/11/2015 23:33:29
Amigo de nuevo, gracias por tu aporte.

Pero te comento que hice lo que me dijo y al compilar me dice que ClickOnce no permite dicho nivel de seguridad <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />. Entonces que podrà ser?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Miguel (354 intervenciones) el 02/11/2015 01:13:30
Mmm... Sinceramente no tengo idea compañero...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por David (45 intervenciones) el 03/11/2015 00:38:29
¿Ejecutas el visual studio como administrador?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Harold Quintero Pineda harpin_@hotmail.com (14 intervenciones) el 03/11/2015 00:58:24
Si compañero, yo creo que el problema es con el SubMain para con ClikOnce. Creó, no se si sea cierto, según averigüe cuando se instala una aplicación con ClikOnce al ejecutar dicha aplicación en el equipo, esta no se lanza directamente desde el ejecutable , sino desde una memoria en caché, un archivo llamado algo como . app...que es una referencia a la aplicación de ClickOnce. Quizás por ese motivo cuando hago doble clic sobre un archivo de mi programa no inicia el SubMain, para poder leer ese archivo y desearilizarlo, para finalmente mostrarlo cuando se abre mi aplicación. Sino es mucho pedir podría enviarles.mi solución y la podrían mirar , se que es mucho pedir, pero es así como vrel que podrían ayudarme.

Dios los.bendiga.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por David (45 intervenciones) el 03/11/2015 02:07:31
Parece ser que, teóricamente no se puede ejecutar ClickOnce con permisos de administrador.
Aunque no es lo correcto, aquí tienes la solución.
Restaura el manifest antes de nada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Miguel (354 intervenciones) el 03/11/2015 05:28:42
Hola, posiblemente si implementas otro instalador te funcione... Por ejemplo el "Install Shield", aquí explican: http://rickersilva.com/?p=246.


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Harold

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Harold (14 intervenciones) el 03/11/2015 21:12:50
Comapañero buenas tardes;

Le comento que ese código no me funciona pues la línea Application.Current.Shutdown(), no la interpreta. No existe ese método. Al igual dicho código lo coloco en el SubMain?. Es decir, modifico el Submain de esa manera?. Pero el identificador Me.Initialized, tampoco lo interpreta, no es un evento reconocido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Harold

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Harold (14 intervenciones) el 03/11/2015 21:19:07
Compañero Miguel;

Voy a intentar con Install, yo lo he utilizado antes, lo que pasa es que no se hasta el momento como asociar la extensión de mi aplicación en el instaldor, para que se instale en el registro de windows, para que cuadno haga doble clic en el archivo se abra mi aplicación y muestre los datos guaradador en el mismo.

Voy a intentarlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por David (45 intervenciones) el 03/11/2015 23:46:07
Perdona, no me fijé bien que tu aplicación es WindowsForms, no WPF. prueba así.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Harold

Desearilizar archivo, cuando hago doble clic en el mismo y se abre mi aplicación

Publicado por Harold (14 intervenciones) el 04/11/2015 14:35:44
Compañero buenos días;

Le comento que aplique el código pero nada, sigue sin funcionar, por lo que creo que no tiene nada que ver por el nivel de seguridad de la aplicación. Ya la verdad si perdí la esperanza en esto, tocará hacerlo con Install Shiel haber si el problema es el instalador ClickOnce o es el código del SubMain.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar