JSL 스크립트 - RunProgram 스크립트가 충돌하는 것 같습니다얘들 아, 누군가가 프로그램 실행 명령을 마친 후에 종료하지 않는 JSL 스크립트를 만난 적이 있습니까? Outlook이 열려 있는지, 열려 있지 않은지 확인하려고합니다. 여기에 내 코드가있다. 어떤 도움을 주시면 감사하겠습니다 :
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>재 : JSL 스크립트 - RunProgram 스크립트를 충돌하는 것 같다정말 도움을 주셔서 감사합니다. 나는 JMP에 대한 아주 새로운 사용자이며,이 커뮤니티는 지금까지 내가 본 것에서 정말 좋습니다.
재 : JSL 스크립트 - RunProgram 스크립트를 충돌하는 것 같다당신은 이것으로 약간의 성공을 거둘 수 있습니다; 나는 과거에 성공을 쌓아왔다. 스타트 JMP에서 프로그램을 분리합니다.
rp=RunProgram(Executable("cmd.exe"),options("/C start outlook.exe"))
RunProgram이 외부 프로그램을 시작하고 ReadFunction ( "text")을 사용하지 않으면 RunProgram 개체가 JSL로 반환되어 외부 프로그램 (예 : rp)을 관리합니다. 그 객체가 파괴되면, rp = 0; JSL 변수를 JSL 변수에 보관하지 않으면 JMP가 외부 프로그램을 완료 할 때까지 대기합니다. 만약 스타트 outlook을 분리하면 rp << IsReadEOF가 1이됩니다.
ReadFunction ( "Text")는 또한 RunProgram을 대기 상태로 만들고 편의상 객체가 아닌 모든 출력을 반환합니다.
재 : JSL 스크립트 - RunProgram 스크립트를 충돌하는 것 같다좋은!
재 : JSL 스크립트 - RunProgram 스크립트를 충돌하는 것 같다드류,
wmic.exe가로드되어 있지 않으며 사용하는 데 관심이 없습니다. 오류가 Wmic 또는 Outlook에서 발생하는지 언급하지 않았습니다.
Run Program ()은 외부 실행 파일을 실행하고 명령 (옵션)을 실행합니다. Outlook이 실행될 때 프로그램에 제어권을 반환 할 명령이 없었기 때문에 JMP로 제어가 반환되지 않을 것으로 예상됩니다. 나는 당신이 Open ()을 사용할 것을 제안한다. 명시된 바와 같이 wmic.exe를 사용하지 않았습니다. 하나의 명령을 실행하고 종료합니까, 아니면 세션을 계속 열어 놓고 있습니까? 이로 인해 실행 프로그램이 절대로 JMP로 제어권을 반환하지 않을 수도 있습니다.
어쨌든 아래는 tasklist.exe를 사용하는 스크립트입니다.
또한 다른 사람들이이 스크립트를 사용하고자하는 경우 where.exe를 사용하여 Outlook.exe의 경로를 찾는 코드를 포함 시켰습니다. 32 비트 Outlook이 있지만 내 경로가 너와 다릅니다. 참고로, outlookpath를 표시하는 데 3 초의 대기 시간이 있습니다. 캡션 코드는 삭제할 수 있습니다.
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)
);