搜索
查看: 443|回复: 0

bootapp 确保同目录某 .exe 保持运行,使用约定编程简化逻辑

[复制链接]

5

主题

17

帖子

128

积分

一级会员

Rank: 2

积分
128
发表于 2018-8-4 13:37:25 | 显示全部楼层 |阅读模式
// bootapp 确保同目录某 .exe 保持运行,使用约定编程简化逻辑
//优点:零配置,复制 bootapp.exe 到需要监控的exe目录,双击 bootapp.exe 就可以了

/*

功能:
确保同目录 .exe 保持运行

缘起:
我有一个程序 dcba.exe, 在 winform 嵌入 IE 控件,程序有时异常退出
在排查到原因前,需要用本程序确保 dcba.exe 保持运行状态

使用方法:
本程序 bootapp.exe 同目录有且只有另一 .exe,比如 dcba.exe
自定义每次延迟秒数,可重命名bootapp.exe为 bootapp-7.exe 表示间隔7秒检查一次
退出方法,程序根目录创建 exit-bootapp.txt

新建工程,命名为 bootapp
把 boootapp.exe 移动到想要要保持运行的 dcba.exe 同一目录


本程序不复杂,主要是用约定编程简化逻辑:
1. 同目录下只有一个其他 .exe,于是就不用指定需要监控的对象
2. 如需更改默认的每次检查的延迟,约定在文件名中表达
3. 退出程序,约定使用特定的文本文件名

*/



// 把个性化变量放在最前面,方便修改

exit =
"/exit-bootapp.txt"  // 根目录存在此文件就退出程序
logfile = "/bootlog.txt"

// 默认的每次检查延迟毫秒。 非精确数字 10000 可写成 10987方便视觉辨识
wait = 10987  // 约 10 秒

// 本程序exe文件名中,分隔符后面数字表示延迟秒数
separator = "-_"  // 分隔符,两者取其一


import fsys
import process
import win

// http://bbs.aardio.com/forum.php?mod=viewthread&tid=31041
import my.log;

log = my.log(logfile)
string.save(logfile,
'\r\n\r\n', true) // 加两个空行区分日志


//---


// 根据 exefile 重设延迟时间
// bootapp-10.exe 表示每次检查10秒
setWait = function(exefile, separator){
   
// 类似 -10.exe 或 _10.exe 是合法的自定义停顿秒数
    var sec = string.match(  exefile, string.format( "[%s](\d+)\.exe", separator )  )  
   
if (!sec) return ;
   
    sec =
tonumber(sec)
   
if sec > 0 {
        wait = sec * 1000
        log.print(
"delay setted to " + sec + " seconds")     
    }
}


getPath =
function(){
   
var name, path
   
    fsys.enum( io._exedir,
"*.exe",
        
function(dir, filename, fullpath, findData){
            
if(filename && filename != io._exefile) {
                name = filename;
                path = fullpath;
               
return false;
         };         
        }
        ,
false // 忽略子目录
    );
   
   
return name, path;
}

//---

setWait(io._exefile, separator)

while(true){
   
// 如果发现约定的文本文件,就退出
    if io.exist(exit)
        
return log.print("Exit:", "found " + exit)
   
   
// 同目录(忽略子目录)没有其他 .exe 就退出
    var name, path = getPath()
   
if !name
        
return log.print("Please put a .exe file in folder:", io._exedir)
   
   
//  发现同目录另一 .exe 没有启动,就启动
    if !process.find(name) {
        process(path)
        log.print(
"boot:", path)        
    }
   
    win.delay(wait)
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-21 03:49 , Processed in 0.078125 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表