Pregunta sobre el pantallazo al ejecutar un comando de DOS desde VFP

1,082 views
Skip to first unread message

emr

unread,
Nov 26, 2010, 1:54:45 AM11/26/10
to Comunidad de Visual Foxpro en Español
Hola saludos a todos mi pregunta es la siguiente:

quiero saber como seria el codigo para ejecutar esta linea sin que me
aparezca la ventana de DOS

!c:\windows\system32\openssl.exe x509 -inform DER -outform PEM -in C:
\sispro\CFD\SelloCFD\aaa010101aaa_CSD_01.cer -pubkey >C:\sispro\CFD
\SelloCFD\aaa010101aaa_CSD_01.cer.pem

Saludos y muchas gracias de antemano.

Enrique Martinez
Puerto Vallarta, Jalisco México

Walter R. Ojeda Valiente

unread,
Nov 26, 2010, 2:31:53 AM11/26/10
to publice...@googlegroups.com
Hola Enrique

Si utilizas el comando RUN siempre aparece la pantalla negra y realmente queda muy feo, muy antiestético. Tu alternativa es usar el WScript.Shell.

  #define SW_SHOW_HIDDEN 0
  #define SW_SHOW_NORMAL 1
  #define SW_SHOW_MINIMIZED 2
  #define SW_SHOW_MAXIMIZED 3

  oShell = CreateObject("WScript.Shell")
  oShell.Run(MiComando, SW_SHOW_HIDDEN, .T.)

Donde reemplazas "MiComando" por lo que tú quieras.

 Saludos.

Walter.

Enrique Martinez

unread,
Nov 26, 2010, 2:37:38 AM11/26/10
to publice...@googlegroups.com
Hola Walter
 
Te agradezco mucho tu ayuda, voy a intentarlo y te comento como me fué.
 
Saludos
 
Enrique Martinez

Enrique Martinez

unread,
Nov 26, 2010, 2:55:11 PM11/26/10
to publice...@googlegroups.com
Hola Walter
 
Te comento que no me funcionó, no se si estoy haciendo algo mal, a continuación te pongo el codigo como lo escribi, me puedes decir por favor si tengo algo mal escrito.
 

oShell =

CreateObject("WScript.Shell")

oShell.

Run('c:\windows\system32\openssl.exe x509 -inform DER -outform PEM -in C:\sispro\CFD\SelloCFD\aaa010101aaa_CSD_01.cer -pubkey >C:\sispro\CFD\SelloCFD\aaa010101aaa_CSD_01.cer.pem', SW_SHOW_HIDDEN, .T.)
Se supone que con esta instruccion me tiene que generar el archivo .pem y no lo genera.
 
Saludos y gracias
 
Enrique Martinez

Armando Rodríguez

unread,
Nov 26, 2010, 3:30:48 PM11/26/10
to publice...@googlegroups.com

Hola Enrique, voy a meter mi cuchara.

 

Con estas instrucciones ejecuto un bat que lo que hace solamente es un type > prn para abrir una caja registradora.

 

LOCAL lcCajon

lcCajon="cajon.bat"

oShell = CREATEOBJECT("WScript.Shell")

oShell.RUN(lcCajon,7,.F.)

RELEASE oShell

 

Te recomiendo que pongas todo en un bat, así solo haces una llamada.

 

Suerte

Armando Rodríguez

Enrique Martinez

unread,
Nov 26, 2010, 4:05:01 PM11/26/10
to publice...@googlegroups.com
Gracias Armando una pregunta mas, si son varias las instrucciones que voy a ejecutar, no necesito crear el objeto varias veces solo ejecuto el oshell.run para cada instruccion.
Tomando tu ejemplo seria
local lcCajon,lcCajon1
lcCajon = "cajon.bat"
lcCajon1="cajon1.bat"
oshell = CREATEOBJECT("WScript.Shell")
oshell.RUN(lcCajon,7,.F.)
oshell.RUN(lcCajon1,7,.F.)
RELEASE oShell
esto seria correcto ?
 
Saludos y gracias
 
Enrique Martinez
2010/11/26 Armando Rodríguez <armandor...@hotmail.com>

Hugo Carlos Aguilar Zapata

unread,
Nov 26, 2010, 5:30:15 PM11/26/10
to publice...@googlegroups.com
meteré mi cuchara tambien jejeje

lo que yo hice para el caso especifico de la fac electronica y ejecuciones de un bat con comandos openSSL es lo que copio mas abajo. Aclaro que en los comandos openSSL concateno variables y propiedades de un formulario, revisalo y ajustalo a tus necesidades, si hay alguna duda la revisamos

Saludos



#define CRLF CHR(13)+CHR(10)

DECLARE INTEGER ShellExecute IN SHELL32.DLL ;
        INTEGER lnHWnd, ;
        STRING lcAction, ;  
        STRING lcFileName, ;
        STRING lcExeParams, ;
        STRING lcDefDir, ;
        INTEGER lnShowWindow


lstrtmpDGST = ""
*** Según Anexo 20 hasta antes del 23 de sep de 2010
lstrtmpDGST = "openssl dgst -md5 -sign " + JUSTFNAME(this.lstrKeyFile) + ".pem -out Bin" + this.lstrBaseName + " " + this.lstrBaseName + CRLF
*** Modificación al Anexo 20 del 23 de Sep de 2010 especifica digestión SHA-1 aplica para 2011
*lstrtmpDGST = "openssl dgst -sha1 -sign " + JUSTFNAME(this.lstrKeyFile) + ".pem -out Bin" + this.lstrBaseName + " " + this.lstrBaseName + CRLF

STRTOFILE("openssl pkcs8 -inform DER -in " + this.lstrKeyFile + " -passin pass:" + this.lstrClaveKeyFile + " -out " + ;
    JUSTFNAME(this.lstrKeyFile) + ".pem" + CRLF + ;
    "openssl x509 -inform DER -outform PEM -in " + this.lstrCerFile + " -pubkey > " + JUSTFNAME(this.lstrCerFile) + ".pem" + CRLF + ;
    lstrtmpDGST + ;
    "openssl base64 -in Bin" + this.lstrBaseName + " -out B64" + this.lstrBaseName + CRLF + ;
    "openssl x509 -in " + JUSTFNAME(this.lstrCerFile) + ".pem -serial -noout > Serie" + JUSTSTEM(this.lstrCerFile) + ".txt" + CRLF + ;
    "openssl x509 -in " + JUSTFNAME(this.lstrCerFile) + ".pem -startdate -noout > FI" + JUSTSTEM(this.lstrCerFile) + ".txt" + CRLF + ;
    "openssl x509 -in " + JUSTFNAME(this.lstrCerFile) + ".pem -enddate -noout > FF" + JUSTSTEM(this.lstrCerFile) + ".txt" + CRLF + ;
    "COPY TEMP\eok.txt", ;
    "DER2PEM_SelloDigital.bat")
ShellExecute(0,"open","DER2PEM_SelloDigital.bat","","",0)

Hugo C.

unread,
Nov 26, 2010, 6:36:39 PM11/26/10
to Comunidad de Visual Foxpro en Español
Yo lo ejecuto asi,

LOCAL oShell AS "WScript.Shell"
oShell = CREATEOBJECT("WScript.Shell")

lcCmd = THIS.RutaOpenSSL + "Bin\openssl dgst -c -sign " +
THIS.LlavePrivadaPem + " -out " + lcArchSello + " " + tcArchiCadena

lcArchivo = GetEnv("TEMP") + "" + Sys(2015) + ".bat"
StrToFile(lcCmd, lcArchivo)

oShell.Run(lcArchivo, 0, 1)

RETURN

Luis Leon

unread,
Nov 26, 2010, 10:52:27 PM11/26/10
to foro vfp
crea un archivo bat, y dentro de este ejecuta tu aplicacion con el comando
 
start nombre de la aplicacion
 
si deseas ejecuta start/? para que te des cuenta de los parametros si deseas usar

 
> Date: Fri, 26 Nov 2010 15:36:39 -0800
> Subject: [vfp] Re: Pregunta sobre el pantallazo al ejecutar un comando de DOS desde VFP
> From: hcch...@gmail.com
> To: publice...@googlegroups.com

Enrique Martinez

unread,
Nov 26, 2010, 11:45:07 PM11/26/10
to publice...@googlegroups.com
gracias hugo voy a probarlo y les comento como me fué
Saludos
 
Enrique Martinez

Enrique Martinez

unread,
Nov 27, 2010, 2:30:41 AM11/27/10
to publice...@googlegroups.com
gracias hugo si tengo una duda en la linea :
 
lstrtmpDGST = "openssl dgst -md5 -sign " + JUSTFNAME(this.lstrKeyFile) + ".pem -out Bin" + this.lstrBaseName + " " + this.lstrBaseName + CRLF
Por que es el mismo dato ? se supone que debe de llevar 3 archivos no ? el pem, el arhivo donde se almacenara el sello y la cadena original, si estoy mal corrigemo por favor.
 
Saludos
Enrique Martinez
 
El 26 de noviembre de 2010 16:30, Hugo Carlos Aguilar Zapata <hugocarl...@gmail.com> escribió:

Ricardo Martinez

unread,
Nov 27, 2010, 9:32:01 AM11/27/10
to publice...@googlegroups.com
yo tmb meto mi cuchara, yo abro el cajon nada mas usando esto :

??? chr(27)+chr(112)+chr(48)+chr(100)+chr(100) &&abre cajon
CLOSE print


--
Saludos. Ricardo Mtz

Hugo Carlos Aguilar Zapata

unread,
Nov 27, 2010, 11:10:15 AM11/27/10
to publice...@googlegroups.com
Es una propiedad del formulario
Supongamos que tiene el valor sig:
this.lstrBaseName = "F1234_20101127_A.txt" (el valor de la propiedad esta basado en campos de algunas tablas)

el comando openSSL genera un archivo llamando (parametro -out) BinF1234_20101127_A.txt que es un archivo de texto con el sello digital en Binario basado en un archivo con la cadena orginal llamado F1234_20101127_A.txt

Porque asi ?, quizas parezca complicado pero decidi generarlo en esa forma para ir monitoreando que efectivamente se creara el sello para cada factura emitida. al final se decidí eliminar estos archivos

La nomeclatura es F de Factura, 1234 del Folio, 20101127 de la fecha y A de la serie, esa propiedad se ultiliza tambien en el metodo de generacion del XML de tal manera que el archivo CFD creado se llamaría F1234_20101127_A.xls.
Son solo ideas mias no es un standard =)

La solucion que muestra Hugo C. es igual solo que genera siempre un solo archivo y listo, Hugo C, tiene esa cualidad  soluciones efectivas y sencillas mi admiración para el tocayo

Enrique checa como te va y nos comentas

Saludos !

Enrique Martinez

unread,
Nov 27, 2010, 11:15:36 AM11/27/10
to publice...@googlegroups.com
ok hugo entendido y anotado, te comento como me fué
 
saludos
 
Enrique Martinez

Enrique Martinez

unread,
Nov 27, 2010, 11:22:07 PM11/27/10
to publice...@googlegroups.com
Hugo te comento que ya lo adapte a mis datos y me genera efectivamente el archivo DER2PEM_SelloDigital.bat y tambien me genera los archivos aaa010101aaa_CSD_01.cer.pem y aaa010101aaa_CSD_01.key.pem, hasta ahi todo bien pero no veo o no me genera los otros archivos:
 
Serieaaa010101aaa_CSD_01.txt
FIaaa010101aaa_CSD_01.txt
FFaaa010101aaa_CSD_01.txt
 
el contenido del DER2PEM_SelloDigital.bat que me genera este:
 
c:\windows\system32\openssl pkcs8 -inform DER -in C:\sispro\CFD\SelloCFD\aaa010101aaa_CSD_01.key -passin pass:a0123456789 -out C:\sispro\CFD\SelloCFD\aaa010101aaa_CSD_01.key.pem
c:\windows\system32\openssl x509 -inform DER -outform PEM -in C:\sispro\CFD\SelloCFD\aaa010101aaa_CSD_01.cer -pubkey > C:\sispro\CFD\SelloCFD\aaa010101aaa_CSD_01.cer.pem
c:\windows\system32\openssl dgst -md5 -sign C:\sispro\CFD\SelloCFD\aaa010101aaa_CSD_01.key.pem -out C:\sispro\CFD\SelloCFD\Bin||2.0|A|1|2010-11-26T15:16:15|6844|2009|ingreso|PAGO EN UNA SOLA EXHIBICION|CONTADO|16100.00|18676.00|MARE710114TB3|ENRIQUE MARTINEZ REGALADO|AMARANTO|1305|LA FLORESTA|PUERTO VALLARTA|JALISCO|MEXICO|48290|IAB010913FDA|INSTITUCIONALES DE LA BAHIA SA DE CV|HEROES DE NACOZARI|119|BUCERIAS|BUCERIAS|NAYARIT|MEXICO|63732|10.00|TECLADO GENERICO|200.00|2000.00|5.00|MOUSE PS2|100.00|500.00|4.00|MEMORIA DDR21GB|500.00|2000.00|5.00|MONITOR 19"|2000.00|10000.00|4.00|PAPEL STOCK BLANCO 8.5 X 11|400.00|1600.00|IVA|16.00|2576.00|| ||2.0|A|1|2010-11-26T15:16:15|6844|2009|ingreso|PAGO EN UNA SOLA EXHIBICION|CONTADO|16100.00|18676.00|MARE710114TB3|ENRIQUE MARTINEZ REGALADO|AMARANTO|1305|LA FLORESTA|PUERTO VALLARTA|JALISCO|MEXICO|48290|IAB010913FDA|INSTITUCIONALES DE LA BAHIA SA DE CV|HEROES DE NACOZARI|119|BUCERIAS|BUCERIAS|NAYARIT|MEXICO|63732|10.00|TECLADO GENERICO|200.00|2000.00|5.00|MOUSE PS2|100.00|500.00|4.00|MEMORIA DDR21GB|500.00|2000.00|5.00|MONITOR 19"|2000.00|10000.00|4.00|PAPEL STOCK BLANCO 8.5 X 11|400.00|1600.00|IVA|16.00|2576.00||
c:\windows\system32\openssl base64 -in Bin||2.0|A|1|2010-11-26T15:16:15|6844|2009|ingreso|PAGO EN UNA SOLA EXHIBICION|CONTADO|16100.00|18676.00|MARE710114TB3|ENRIQUE MARTINEZ REGALADO|AMARANTO|1305|LA FLORESTA|PUERTO VALLARTA|JALISCO|MEXICO|48290|IAB010913FDA|INSTITUCIONALES DE LA BAHIA SA DE CV|HEROES DE NACOZARI|119|BUCERIAS|BUCERIAS|NAYARIT|MEXICO|63732|10.00|TECLADO GENERICO|200.00|2000.00|5.00|MOUSE PS2|100.00|500.00|4.00|MEMORIA DDR21GB|500.00|2000.00|5.00|MONITOR 19"|2000.00|10000.00|4.00|PAPEL STOCK BLANCO 8.5 X 11|400.00|1600.00|IVA|16.00|2576.00|| -out B64||2.0|A|1|2010-11-26T15:16:15|6844|2009|ingreso|PAGO EN UNA SOLA EXHIBICION|CONTADO|16100.00|18676.00|MARE710114TB3|ENRIQUE MARTINEZ REGALADO|AMARANTO|1305|LA FLORESTA|PUERTO VALLARTA|JALISCO|MEXICO|48290|IAB010913FDA|INSTITUCIONALES DE LA BAHIA SA DE CV|HEROES DE NACOZARI|119|BUCERIAS|BUCERIAS|NAYARIT|MEXICO|63732|10.00|TECLADO GENERICO|200.00|2000.00|5.00|MOUSE PS2|100.00|500.00|4.00|MEMORIA DDR21GB|500.00|2000.00|5.00|MONITOR 19"|2000.00|10000.00|4.00|PAPEL STOCK BLANCO 8.5 X 11|400.00|1600.00|IVA|16.00|2576.00||
c:\windows\system32\openssl x509 -in C:\sispro\CFD\SelloCFD\aaa010101aaa_CSD_01.cer.pem -serial -noout > C:\sispro\CFD\SelloCFD\Serieaaa010101aaa_CSD_01.txt
c:\windows\system32\openssl x509 -in C:\sispro\CFD\SelloCFD\aaa010101aaa_CSD_01.cer.pem -startdate -noout > C:\sispro\CFD\SelloCFD\FIaaa010101aaa_CSD_01.txt
c:\windows\system32\openssl x509 -in C:\sispro\CFD\SelloCFD\aaa010101aaa_CSD_01.cer.pem -enddate -noout > C:\sispro\CFD\SelloCFD\FFaaa010101aaa_CSD_01.txt
COPY TEMP\eok.txt

Se supone que de esos archivos es de donde voy a tomar el dato del sello digital no ?
 
Saludos
 
Enrique Martinez

Hugo Carlos Aguilar Zapata

unread,
Nov 28, 2010, 4:00:58 PM11/28/10
to publice...@googlegroups.com
que tal Enrique
Esta Equivocado el bat en lugar de que te ponga toda la cadena originaldespuesde "BIN" debe ser el nombre del archivo de la cadena original

esa linea quedaria de acuerdo a tus rutas

c:\windows\system32\openssl dgst -md5 -sign C:\sispro\CFD\SelloCFD\
aaa010101aaa_CSD_01.key.pem -out C:\sispro\CFD\SelloCFD\ALGÚN_NOMBRE_DE_ARCHIVO C:\sispro\CFD\SelloCFD\Archivo_con_la_cadena_orig

ALGÚN_NOMBRE_DE_ARCHIVO: es el archivo donde se creará el sello digital en binario, yo le puse "BIN" mas lo demas.txt, cualqueir nombre es valido


para pasar a base64
la linea del BAT seria
c:\windows\system32\openssl base64 -in ALGÚN_NOMBRE_DE_ARCHIVO -out OTRO_ARCHIVO

OTRO_ARCHIVO: es el archivo que contedria el valor del sello en base64 y es el que se incluye en el CFD

Te sugiero qe pruebes cada linea en  MS-DOS, para que vayas viendo paso por paso la ejecucion del openSSL y los resultados que arroja, quizas te puede dar mensajes de error

PD
Creo que usaste macrosustitucion

Saludos

Enrique Martinez

unread,
Nov 29, 2010, 1:02:23 AM11/29/10
to publice...@googlegroups.com
Ok Hugo te comento que ya mefuncionó perfecto, te agradezco mucho tu ayuda.
 
Saludos y muy agradecido.
 
Enrique Martinez

Hugo Carlos Aguilar Zapata

unread,
Nov 29, 2010, 9:48:40 AM11/29/10
to publice...@googlegroups.com
Por nada, que bueno que ya te funcionó suerte con lo demás
Veo que trabajas de madrugada, jejeje ahora si a descansar

Saludos desde Piedras Negras Coah.

Enrique Martinez

unread,
Nov 29, 2010, 5:39:43 PM11/29/10
to publice...@googlegroups.com
Hola hugo gracias y efectivamente trabajo un rato por las noches que es cuando mas le avanzo, y por que traigo el tiempo encima.
 
y si ahora a descansar, solo me falta resolver lo que te comenté en la otra liga, lo de la factura en formato utf-8.
 
Pero bueno estoy a punto de poder dormir, claro despues de resolver esto jejejejejej
 
Saludos desde Puerto Vallarta, Jalisco
 
Enrique Martinez

Hugo Carlos Aguilar Zapata

unread,
Nov 29, 2010, 8:06:17 PM11/29/10
to publice...@googlegroups.com
Enterado a ver cuando me invitas al puerto jejeje a dar un rol por alla, aqui ya se esta ponienido frío, se nos fué el verano =(

Saludos  !

Enrique Martinez

unread,
Nov 29, 2010, 11:11:38 PM11/29/10
to publice...@googlegroups.com
Cuando gustes Hugo, tu dices cuando vienes.
 
 
Saludos
 
Enrique Martinez

Reply all
Reply to author
Forward
0 new messages