@mlrpadilla JMP가 파일을 저장할 기회를 얻지 못할 때 파일 복구에 대해 질문했습니다.컴퓨터/JMP 종료를 피할 수 없는 경우 JMP 파일에서 가장 최근 작업을 복구하려면 어떻게 해야 합니까?
저는 1년 전에 .JSL 스크립트를 사용하여 정전으로 인해 몇 시간 동안 작업해야 했던 비슷한 경험을 했습니다. 주기적으로 열려 있는 JSL 파일을 찾고 스냅샷을 만드는 추가 기능을 작성했습니다. JMP 데이터 테이블의 스냅샷은 생성하지 않습니다. 그리고 그것은 Windows에서만 작동합니다. 그러나 그 이후로 몇 번이나 JSL을 저장했습니다. 또한 적어도 한 번은 실패했습니다(아래).
FileSnapper 애드인
설치 후 FileSnapper 애드인 스크립트는 5분마다(기본값) 실행되며 수정된 스크립트 창을 찾기 위해 열려 있는 창을 살펴봅니다. 하나를 찾으면 텍스트를 잡고 멀리 저장합니다.
JMP가 정상적으로 닫히지 않으면 센티널 파일이 남게 됩니다. 다음에 JMP가 실행되어 센티널을 찾으면 JMP는 FileSnapper 대화 상자를 열어 복원하려는 스냅샷이 있는지 확인할 수 있습니다. 추가 기능 메뉴에서 대화 상자를 열고 몇 가지 속성(예: 5분 간격 및 14일 보존 기간)을 설정할 수도 있습니다.
작동 방식
FileSnapper를 가능한 한 보이지 않게 유지하기 위해 JSL 스케줄러를 사용하지 않습니다. (스케줄러는 창을 열고 다른 용도로 사용할 수 있는 스케줄러는 하나뿐입니다.) 대신 FileSnapper는 RunProgram을 사용하여 주기적인 웨이크업 호출을 받습니다. 많은 반복이 있었습니다. 현재 버전은 CMD.EXE 및 DOS를 사용하고 있습니다. 기다립니다 5분마다 일부 텍스트를 FileSnapper로 다시 보내는 루프의 명령. JMP가 종료되면 기다립니다 CMD.EXE가 빨리 종료되도록 하는 이벤트입니다. 센티넬이 사라지면 CMD.EXE도 종료됩니다.
Sentinel 파일에는 작은 JMP 데이터 테이블이 사용됩니다. 테이블이 저장되지만 비공개 테이블로도 열린 상태로 유지됩니다. JMP의 두 번째 복사본이 실행되면 JMP의 다른 복사본에서 테이블이 열려 있음을 감지하고 (1) 복구 대화 상자를 열지 않고 (2) 다른 감시 파일을 만듭니다. 열려 있지 않은 센티넬이 발견되면 열려 있지 않은 모든 센티널이 제거되고 복구 대화 상자가 열립니다. 파일을 복구하라는 메시지는 한 번만 표시되어야 합니다.
추가 기능은 종료 후크를 사용하여 센티널을 제거하고 RunProgram이 종료되도록 여러 작업을 수행합니다. 진단 show() 호출이 몇 번 남을 수 있지만 JMP가 종료되기 때문에 일반적으로 출력을 볼 수 없습니다. 보기->추가 기능을 사용하여 FileSnapper를 활성화/비활성화하고 로그 창에서 볼 수 있습니다.
backup() 함수는 RunProgram에서 5분마다 호출됩니다. Backup()은 더러운(수정된) 편집기 창을 찾고, 내용을 마지막 시간과 비교하고, 변경된 경우 사본을 저장합니다. 스냅샷용 문서 아래에 특수 폴더가 생성됩니다. 다음과 같은 이유로 파일을 사용하려고 시도하지 않도록 파일이 읽기 전용으로 표시됩니다.
FileSnapper가 시작될 때마다 이전 스냅샷 파일을 연구합니다. FileSnapper는 오래된 스냅샷을 자동으로 삭제합니다. 로그가 얼마나 시끄러운지 제어할 수 있지만 FileSnapper가 만드는 모든 스냅샷을 기록하는 것은 원하지 않습니다. 5분마다 한두 번 키 입력을 잃을 수 있고 더 많은 로그 활동으로 인해 상황이 악화될 수 있기 때문입니다.
대화 상자 창(오류 후 또는 메뉴에서)은 가장 최근 스냅샷에서 가장 오래된 스냅샷 목록을 표시합니다. (1) 두 번 클릭하여 열거나 (2) 한 번 클릭하여 선택할 수 있습니다. 하나의 파일을 선택하면 선택한 파일을 마우스 오른쪽 버튼으로 클릭하고(오른쪽 클릭은 선택하지 않습니다. 안타깝지만!) 기존 파일과 비교할 수 있습니다. 두 파일을 선택하면 마우스 오른쪽 버튼을 클릭하고 두 파일을 비교할 수 있습니다. 파일이 동일한지 빠르게 확인하려면 비교 창의 제목을 확인하십시오. 기존 파일과 비교하면 프롬프트가 표시되지 않습니다. 올바른 이름의 파일에 대해 레지스트리와 일부 식별된 디렉토리를 찾습니다. 비교하려는 파일일 수도 있고 아닐 수도 있습니다.
하지만 여전히 일부 작업을 잃었습니다.
스크립트를 개발할 때 종종 Esc 키를 눌러 스크립트를 중지합니다. FileSnapper는 스크립트입니다. 때때로 Esc 키를 처리하고 잘못된 시간에 중지하여 5분 후에 다시 실행되지 않도록 방지할 방법이 없는 것 같습니다. FileSnapper에는 5분 후에 데이터 테이블이 열린 경우에만 중지되었다는 보고서를 작성하기 위한 얼간이 아이디어가 있습니다. 제 경우에는 스크립트를 작성할 때 데이터 테이블을 자주 사용하지 않아서 알림을 받지 못할 수도 있습니다.
어느 시점에서 보존 기간을 100일로 설정하고 스냅샷 빈도를 30초로 설정했습니다. 이것은 너무 많습니다. 10,000개가 넘는 파일이 있었고 JMP를 시작하는 데 30초가 걸렸습니다. 대화 상자의 옵션에서 통증 수준을 선택하십시오. 저장 버튼을 누른 다음 대화 상자를 닫습니다.
이것이 JMP에 내장되기를 원하고 더 나은 콜백 타이머를 원합니다. 개선할 수 있는 부분이 많이 있습니다(예: 대화 상자의 저장 버튼이 피드백을 제공하지 않음). 실제로 누군가를 도울 수도 있고 그렇지 않을 수도 있습니다. 가끔 놓친 키 입력에 싫증이 나면 제거할 수 있습니다. 동일한 보기->추가 기능 메뉴를 통해 소스를 볼 수도 있습니다. 덕분에 @Justin_Chilton 프로젝트의 JSL 창 작동 방식을 지적합니다.
추가 기능.
설정이 정말 마음에 드네요 실행 전 자동 저장 .
- JSL 디버깅 중에 JSL 코드가 몇 분마다 저장되는지 확인할 수 있습니다(모든 시도를 통해 실행)
- 클라우드에 JSL 파일을 저장하면 이전 버전의 코드를 얻을 수 있습니다. - 마지막 버전이 문제가 있는 경우를 대비해...
