[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 这种监视PID与否并作出相应动作vbs可以做到吗-附上同功能BAT

本人知道使用bat除了写入自己的pid好像有点难,其它没什么问题,对vbs了解不多,不知vbs可以做到吗
bat代码:
  1. @echo off
  2. ::设置再次检测等待时间
  3. set xtime=10
  4. ::PID写出不会,没有想到绝妙的法子,试想过用先后tasklist对比分析,但觉得不科学准确性也不高... ...
  5. :recheck
  6. ::从pid.txt提取所要检查的pid
  7. if not exist pid.txt start a.exe&goto recheck
  8. for /f %%a in (pid.txt) do set pid=%%a
  9. :recheck2
  10. ::查看pid是否存在并作出判断后动作
  11. (for /f "skip=2 tokens=2 delims=," %%b in ('tasklist /fo csv /nh') do @echo=%%~b)|findstr /i "\<%pid%\>">nul
  12. if "%errorlevel%"=="0" (ping -n %xtime% 127.1>nul&goto recheck2) else start a.exe&goto recheck
复制代码
希望vbs大神能够解答

回复 2# batman


    ,超版回复的
是这样的,本人一直在学习bat,但是目前做的一个项目中需要复活功能,当然不能还用bat来制作了,毕竟bat的运行都会开启cmd进程,有可能会被一并杀死,就想到了vbs,之前用的是从网络上搜索的这个
  1. set wsShell=createobject("wscript.shell")
  2. do
  3.     if not isProcessExists("cmd.exe") then
  4.         wsShell.run """a.exe""",1
  5.     end if
  6.     WScript.Sleep 1000*10
  7. loop
  8. Private Function isProcessExists(proName)
  9.     Set objWMIService = GetObject("winmgmts:" & "{impersonationlevel=impersonate}!\\.\root\cimv2")
  10.     Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name='" & proName & "'")
  11.     isProcessExists = (colProcessList.Count <> 0)
  12. End Function
复制代码
但是目前需要更高一层的vbs,但苦于网络上基本搜索不到,本人对vbs几乎一窍不通,又因为只是个基本固定的功能不想深入研究也还没打算学习,所以--- ---
(项目为为学校义务机房相关管制bat,非不良用途)

TOP

获取当前CMD 的 PID  By Yu2n
注意,当一个BAT文件被同时多次开启时,可能撞车……
yu2n 发表于 2015-3-20 23:46



    我的初衷是想要一个实现流程图所述功能的vbs... ...,好吧继续等大神,这个bat pid获取看起来挺厉害的,不过其中好像包含了vbs代码,不太理解,望大神能够给个可以实现流程图所述功能的vbs

TOP

回复 7# yu2n


    就跟附上的同功能bat实现的功能相同就好(需要将自身的pid写出到文件,这个同功能bat没能实现)

TOP

回复 9# yu2n


    是这样,本人擅长bat但是对vbs一窍不通,项目功能实现全是靠bat,但是进程监视需要非bat代码,所以找vbs
项目bat运行后将自己的pid写入pid.txt,然后由vbs读取后查看进程状况,如果进程被杀则复活项目主程

TOP

回复 11# DAIC


    解决了另一个问题,正好项目主程是的标题是随机的,这样的话可以增加定位pid准确性,进程名称+进程标题定位pid,恩,谢咯

TOP

返回列表