viernes, 14 de febrero de 2020

Compilar paso a paso un proyecto de Visual Basic Script

Compilación avanzada de con Visual Studio

Hay veces que el código que ejecutamos no es el mismo que vemos en Visual Studio. Puede haber varias razones, como la utilización de parámetros internos, recompilaciones o cualquier cosa que nos haga ver una cosa y ejecute otra. Para depurar el código que realmente se está ejecutando en la máquina se puede utilizar el método descrito a continuación.

Ejecutamos el archivo .exe generado para nuestra aplicación, y en el momento que deseamos para la ejecución, abrimos Visual Studio y hacemos Depurar -> Asociar al Proceso (ctrl+ Alt + P) y elegimos el hilo de nuestro ejecutable (es el mismo método que se describe a continuación para Visual Basic Script)

Si el código que ejecuta es el mismo de nuestro VS lo mostrará en amarillo, si no es igual, mostrará por donde va, pero la línea no irá en amarillo, eso nos dará la pista de que lo que ejecuta no es lo mismo que tenemos escrito en el código.

Compilación de archivos de Visual Basic Script

Un archivo de Visual Basic Script no se puede compilar, hay que ir poniendo Msgbox para hacerse una idea de por donde va y lo que va haciendo, pero hay veces que la ejecución de un vbs llama a un proyecto de Visual Basic normal y este último si se puede compilar. Para ello necesitamos compilación remota. 


Desde el proyecto VB se ejecuta un procedimiento que es llamado a través de un archivo Vbs esto se hace con el código coloreado.

  Sub Main()
        ' System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False
        AbrirLog()

         log = LogManager.GetLogger(System.Reflection.Assembly.GetExecutingAssembly().GetType())
        Try
            log4net.Config.XmlConfigurator.Configure()

            Dim i As Integer
            Dim strArg As String = ""
            For i = 1 To Environment.GetCommandLineArgs.Length - 1
                strArg = strArg & Environment.GetCommandLineArgs(i) & " "
            Next

            If strArg = "" Then
                strArg = "Generación del Modelo Físico"
            End If
            EscribirLog("Proceso: " & strArg & " - " & Now())

            PD = New PdCommon.Application
            PDStartTime = Now
            PD.InteractiveMode = InteractiveModeValue.im_Dialog

            LeerConfig()
            'Comprobamos que proceso se quiere realizar.
            If Environment.GetCommandLineArgs.GetLength(0) = 1 Then
                Dim d As New frmMain

                AbrirConexionPD()
                d.ShowDialog()
            End If

            i = 0
            For Each arg As String In Environment.GetCommandLineArgs()

                Select Case i
                    Case 1 'Argumento primero

                        Select Case arg.ToUpper
                            Case "EtiquetaVBs".ToUpper
                                MsgBox("comienza ejecucion VB")
                                ProcedimientoVB()
                                …
                                …

Para ello hacemos lo siguiente:

primero ejecutamos el  proyecto de VB en modo debug para generar el .exe; hecho esto ejecutamos de nuevo desde Visual Studio y vamos al archivo Vbs que contiene una llamada de este estilo al proyecto de VB.

Compilar paso a paso un proyecto de Visual Basic Script


dim EjecObj
Dim Cadena

Cadena = """C:\Proyectos\bin\x86\Debug\ADE.exe"" ""etiquetaVBs"""
set EjecObj = createobject("Wscript.shell")
EjecObj.Run(Cadena)

Hay que tener en cuenta que la ruta llamada debe coincidir con la ruta donde se ha alojado el archivo .exe al generarlo en modo Debug.

Al ejecutar el archivo Vbs que contiene esta líneas, llama al proyecto VB que se ejecuta hasta llegar al MsgBox.   

MsgBox("comienza ejecucion VB")

Al parar en este punto, vamos al proyecto de VB en visual studio y en el menu depurar elegimos asociar al proceso.

Asociar proceso VB


Y elegimos nuestro proyecto como proceso.

Asociar un proceso Visual Basic Script a otro de VB

Y pulsamos asociar, esto no hace aparentemente nada, debemos pulsar en interrumpir todo.

Pausar ejecución de un proceso

Entonces la línea de nuestro Msgbox se queda verde.

Comenzar ejecución de Proceso de Vbs

Ahora pulsamos F11 o F10 para comenzar con la depuración y nos sale el MsgBox.

Depurar un proceso VB Script

Pulsamos aceptar y la línea se pone en amarillo con lo que ya podemos comenzar con la depuración.

Depurar un proceso VB Script


No hay comentarios:

Publicar un comentario