Script de JSL - RunProgram parece fallar el scriptHola chicos, ¿alguien ha encontrado una secuencia de comandos JSL que no se cerrará después de ejecutar un comando del programa? Estoy tratando de determinar si la perspectiva está abierta y si no la abro. Aquí está mi código. Cualquier ayuda sería apreciada:
Names Default To Here( 1 ); // Make sure variables are stored in this procedure
Clear Log(); // Clear the JMP Log - Select View - Log
// Get the current windows processes (process list) using teh wmic.exe
windowsProcesses = RunProgram(executable("wmic"),options({"process list"}),
readfunction(function({this},write(this<<READ></READ>Re: JSL script - RunProgram parece fallar scriptRealmente aprecio la ayuda. Soy un usuario muy nuevo de JMP y esta comunidad es muy buena por lo que he visto hasta ahora.
Re: JSL script - RunProgram parece fallar scriptUsted podría tener algún éxito con esto; He tenido éxito mixto en el pasado usando comienzo para separar un programa de JMP.
rp=RunProgram(Executable("cmd.exe"),options("/C start outlook.exe"))
Cuando RunProgram inicia un programa externo y no usa ReadFunction ("texto"), un objeto RunProgram se devuelve a JSL para administrar el programa externo (rp, en el ejemplo). Cuando ese objeto es destruido, por rp = 0; quizás, o al no mantenerlo en una variable JSL, entonces JMP espera a que se complete el programa externo. Si comienzo separa la perspectiva, entonces rp << IsReadEOF será 1.
ReadFunction ("Texto") también hace que RunProgram espere, y como una conveniencia, simplemente devuelve toda la salida en lugar de un objeto.
Re: JSL script - RunProgram parece fallar script¡agradable!
Re: JSL script - RunProgram parece fallar scriptDibujó,
No tengo wmic.exe cargado y no estoy interesado en usarlo. No mencionó si el error está ocurriendo con wmic o outlook.
Ejecutar programa () ejecuta el ejecutable externo y ejecuta los comandos (opciones). Espero que el control nunca se devuelva a JMP porque no hubo comandos para devolver el control al programa cuando se ejecutó Outlook. Te sugiero que uses Open () por si acaso. Como he dicho, no he usado wmic.exe; ¿ejecuta un comando y finaliza, o mantiene la sesión abierta? Esto también podría hacer que el programa de ejecución nunca devuelva el control a JMP.
De todos modos, a continuación hay un script que usa tasklist.exe.
Además, en caso de que otros quisieran usar este script, incluí el código para encontrar la ruta de Outlook.exe utilizando where.exe. También tengo Outlook de 32 bits, pero mi ruta era diferente a la tuya. Tenga en cuenta que hay una espera de 3 segundos que muestra la ruta de acceso. Ese código de subtítulo puede ser eliminado.
Names Default To Here( 1 ); // Make sure variables are stored in this procedure
Clear Log(); // Clear the JMP Log - Select View - Log
//find outlook
outlookpath = "";
cmd1 = "\[/c where /R "C:\Program Files (x86)" OUTLOOK.EXE]\";
rp0 = RunProgram(Executable("CMD.EXE" ),
Options({Eval(cmd1)}),
Read Function("text")
);
outval = words(Trim(rp0), "\!n");
if(StartsWith(outval[1], "C:\Program Files"), outlookpath=outval[1]);
//only run this if not found
if (outlookpath =="", //try for 64 bit version of excel
cmd1 = "\[/c where /R "C:\Program Files" OUTLOOK.EXE]\";
rp0 = RunProgram(Executable("CMD.EXE" ),
Options({Eval(cmd1)}),
Read Function("text")
);
outval = words(Trim(rp0), "\!n");
if(StartsWith(outval[1], "C:\Program Files"), outlookpath=outval[1] );
);
if(outlookpath =="", Caption("Cannot find Excel ... aborting"),
Caption( "Outlook path is: "|| outlookpath) );
wait(3);
caption(remove);
//_____________________________________________________________________________
windowsProcesses = RunProgram(executable("CMD.exe"),options({"/c tasklist /FI \!"IMAGENAME eq outlook.exe\!""}),
readfunction("text")
);
/* to get a list of all processes just use /c tasklist */
show(windowsProcesses);
//
// Check if outlook is open by searching the log file
openYesNo = If(contains(lowercase(Trim(windowsProcesses)),"outlook"),1,0);
// Open Outlook if it is currently closed
If( openYesNo == 0,
Open(outlookpath)
);