Autor
|
Tema: Archivo .bat sincronizado con barra de estado en visual bacic.net (Leído 6,261 veces)
|
FOXAR
Desconectado
Mensajes: 7
|
hola espero y me puedan ayudar tengo un archivo .bat que me genera una copia de seguridad de mi base de datos y la ejecuto desde mi aplicación en visual bacic, lo que quiero que que me ayuden a como asociar lo que se demora ese archivo ejecutándose con una barra de estado para que el usuario sepa cuando termino la copia de seguridad. de ante mano gracias
|
|
|
En línea
|
|
|
|
engel lex
|
el comando retorna algún valor en la consola? si no sería inútil colocar un tiempo fijo porque va a cambiar según procesos tengas abiertos, tamaño de la base, etc...
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
FOXAR
Desconectado
Mensajes: 7
|
solo crea la carpeta donde se va a guardar y luego guarda en esa ruta mas no retorna un valor
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Conectado
Mensajes: 9.878
|
Buenas
El planteamiento de la aplicación es incorrecta, ya que estás utilizando una herramienta simple de procesamiento por lotes desde un lenguaje de alto nivel.
1. Puedes hacer TODO lo que puedas hacer en Batch, utilizando puro código .Net.
2. Para implementar una barra de progreso a un proceso externo, en este caso CMD, debes utilizar técnicas de IPC (inter-process comunication) para leer el stream de salida de la CMD y tomar como referencia algún indicador que sirva para estimar el porcentaje de progresión.
El caso es que formulas una duda donde está implicado un código Batch pero ni siquiera muestras el contenido del Batch-Script ¿?, Si en la consola no se muestra ningún tipo de indicador (1%...100% / 1 de 100) entonces olvídate de poder implementar una barra de progreso en tu aplicación de escritorio, a menos que no te importe utilizar una barra de progreso de estado indeterminado (sin mínimo, ni máximo).
Saludos
|
|
« Última modificación: 2 Marzo 2015, 21:24 pm por Eleкtro »
|
En línea
|
|
|
|
FOXAR
Desconectado
Mensajes: 7
|
haaa este es .bat cls IF NOT EXIST "D:\ruta\backup\ %date:~6,4%\ %date:~3,2%\ %date:~0,2%%date:~3,2%%date:~6,4%" MD "D:\ruta\backup\ %date:~6,4%\ %date:~3,2%\ %date:~0,2%%date:~3,2%%date:~6,4%" cd "D:\ruta\backup\ %date:~6,4%\ %date:~3,2%\ %date:~0,2%%date:~3,2%%date:~6,4%" SET PGPASSWORD=contraseña "C:\Archivos de programa\PostgreSQL\9.3\bin\"pg_dump.exe --host localhost --port 5432 --username siscolsi --format custom --blobs --verbose --file "D:\ruta\backup\ %date:~6,4%\ %date:~3,2%\ %date:~0,2%%date:~3,2%%date:~6,4%\basede datos- %date:~0,2%%date:~3,2%%date:~6,4%_ %Time:~0,2%HH %Time:~3,2%MM.backup" "nombre del baku"
[MOD]:
espero que me ayuden para poder sincronizarlos 1. Utiliza el botón de insertar código para insertar bloques de código. 2. Publica las preguntas sobre .Net en la sección dedicada a la programación .Net Lee las normas del foro.
|
|
« Última modificación: 2 Marzo 2015, 21:53 pm por FOXAR »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Conectado
Mensajes: 9.878
|
¿y donde está el código de VB.Net?, aquí no hacemos tareas. Además desconocemos la salida de dicho proceso "pgdump", y se te han dado indicaciones de lo que debes hacer. De todas formas te muestro un extenso ejemplo sobre cómo traducir ese batch-script a VB.Net, y cómo leer la salida normal/error de dicho proceso, de forma asíncrona: Imports System.Globalization Imports System.IO Imports System.Text Public Class TestForm ReadOnly backupDirDateFormat As String = Date.Today.ToString("yyyy\\MM\\ddMMyyyy", CultureInfo.InvariantCulture) ReadOnly dbFilenameDateFormat As String = Date.Now.ToString("ddMMyyyy_HH\H\Hmm\M\M", CultureInfo.InvariantCulture) ReadOnly sourceDir As String = "D:\ruta\backup" ReadOnly backupDir As String = Path.Combine(Me.sourceDir, Me.backupDirDateFormat) ReadOnly dbSrcFilepath As String = Path.Combine(Me.backupDir, String.Format("basede datos-{0}.backup", Me.dbFilenameDateFormat)) ReadOnly dbDstFilepath As String = Path.Combine(Application.StartupPath, "Nombre del backup") ReadOnly pgFilepath As String = "C:\Archivos de programa\PostgreSQL\9.3\bin\pg_dump.exe" ReadOnly pgPassword As String = String.Empty ReadOnly pgArgsFormat As String = <a> --host "localhost" --port "5432" --username "siscolsi" --format "custom" --blobs --verbose --file "{0}" "{1}"< /a>. Value Private WithEvents pgProcess As New Process With { .EnableRaisingEvents = True, .StartInfo = New ProcessStartInfo With { .FileName = Me.pgFilepath, .Arguments = String.Format(Me.pgArgsFormat, Me.dbSrcFilepath, Me.dbDstFilepath), .CreateNoWindow = False, .RedirectStandardError = True, .RedirectStandardOutput = True, .StandardErrorEncoding = Encoding.Default, .StandardOutputEncoding = Encoding.Default, .UseShellExecute = False, .WindowStyle = ProcessWindowStyle.Hidden, .WorkingDirectory = Application.StartupPath } } Private Sub TestForm_Load() _ Handles MyBase.Load If Not Directory.Exists(Me.sourceDir) Then Try Directory.CreateDirectory(Me.sourceDir) Catch ex As Exception Throw End Try End If With Me.pgProcess .Start() .BeginOutputReadLine() .BeginErrorReadLine() ' .WaitForExit(milliseconds:=0) .WaitForExit() End With End Sub Private Sub PGprocess_OutputDataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs) _ Handles pgProcess.OutputDataReceived If Not String.IsNullOrEmpty(e.Data) Then Debug. WriteLine(String. Format("out: {0}", e. Data)) End If End Sub Private Sub PGprocess_ErrorDataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs) _ Handles pgProcess.ErrorDataReceived If Not String.IsNullOrEmpty(e.Data) Then Debug. WriteLine(String. Format("err: {0}", e. Data)) End If End Sub Private Sub PGprocess_Exited(ByVal sender As Object, ByVal e As EventArgs) _ Handles pgProcess.Exited Debug. Print(String. Format("Process exited at {0}", Date. Now. ToShortTimeString)) End Sub End Class
Lee un poco sobre la class Process, y técnicas de IPC en .Net. Saludos.
|
|
« Última modificación: 2 Marzo 2015, 22:43 pm por Eleкtro »
|
En línea
|
|
|
|
FOXAR
Desconectado
Mensajes: 7
|
guaw no tenia ni idea que eso se podía hacer de esta manera. la verdad es que el código de vb.net que yo tengo genera la creación de ese archivo .bat recibiendo como parámetros la ruta el password el usuario el host y el nombre. y luego en otro botón ejecuto ese archivo .bat espero que me disculpes soy nuevo en este foro y agradezco mucho su ayuda muchas gracias
|
|
« Última modificación: 2 Marzo 2015, 22:56 pm por FOXAR »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Conectado
Mensajes: 9.878
|
Sigue este consejo: Olvida completamente Batch, y también el uso de aplicaciones externas commandline en la medida de lo posible, jeje. Con el ejemplo que te he mostrado, primero deberás comprobar si el formato que le dí a las cadenas es la correcta para tí, y podrás leer la salida del proceso 'pgdump.exe', ya a apartir de ahí implementar una ProgressBar es cosa tuya, por que para llevarlo a cabo se requiere leer la salida estándar del proceso (en el event-handler 'PGprocess_OutputDataReceived') y realizar las estimaciones necesarias teniendo en cuenta que dicho programa muestre algún indicador de progreso, claro está, ya sea un porcentaje o la cantidad de archivos copiados y restantes. Si el proceso no muestra ese tipo de información entonces solo puedes crear una barra de progreso con progreso indeterminado, y esperar a que el la instancia del proceso envie el evento de terminación del proceso (event-handler 'PGprocess_Exited') With Me.ProgressBar1 .Style = ProgressBarStyle.Marquee .MarqueeAnimationSpeed = 50 End With
EDITO: Se me ocurre una cosa viable, si conoces la cantidad de archivos a copiar y su ubicación, entonces podrías calcular el porcentaje de la barra de progreso leyendo los bytes totales de los archivos de origen, y los bytes que se han copiado en el directorio destino. Puedes utilizar la class FileInfo para leer el tamaño de bytes de un archivo. Saludos
|
|
« Última modificación: 2 Marzo 2015, 23:10 pm por Eleкtro »
|
En línea
|
|
|
|
FOXAR
Desconectado
Mensajes: 7
|
muchas gracias por tu ayuda el código que me pasaste no lo entiendo muy bn pero ya estoy tratando de comprenderlo me has ayudado mucho gracias por hacer que entienda la programación de una mejor manera
|
|
|
En línea
|
|
|
|
FOXAR
Desconectado
Mensajes: 7
|
es una sola base de datos que se aloja en el servidor una ves se ejecuta el .bat genera un baku de posgresql con todas sus tablas información en las tablas funciones disparadores tigger etc. eso demora dependiendo que tan cargada este la base de datos
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Cómo eliminar estado en la barra de estado?
« 1 2 »
Java
|
WHK
|
10
|
6,347
|
22 Junio 2012, 01:32 am
por Nortis
|
|
|
Barra de progreso en subida de archivo C#
.NET (C#, VB.NET, ASP)
|
MeTaD
|
4
|
5,140
|
19 Febrero 2013, 21:41 pm
por spiritdead
|
|
|
La NSA tenía un archivo con datos de 122 jefes de Estado
Noticias
|
wolfbcn
|
2
|
1,786
|
29 Marzo 2014, 23:05 pm
por Gh057
|
|
|
MOVIDO: Archivo .bat sincronizado con barra de estado en visual bacic.net
Scripting
|
Eleкtro
|
0
|
1,768
|
2 Marzo 2015, 21:13 pm
por Eleкtro
|
|