日期:2014-05-17  浏览次数:20921 次

让windows批处理脚本在后台运行

让windows批处理脚本在后台运行
2010年12月24日
  set ws=wscript.createobject("wscript.shell") ws.run "win.bat /start",0 (其中win.bat为你自己的批处理名字,自己改) 然后把这个记事本保存为后缀名为.vbe的文件,到时候你只要运行这个vbe文件就达到目的了! 其它相关: http://hi.baidu.com/avalon3515/blog/item/07f3ccf8c 8f38c08d8f9fd1b.html 最经典方法:某高人写的: rem @echo off if "%1" == "h" goto begin mshta javascript : new ActiveXObject('WScript.Shell').Run('cmd %~dp0%~nx0 h',0);(window.close() )&&exit :begin rem 在这里添加你的代码 http://hi.baidu.com/art008/blog/item/e8a3942f9c148 6381f30899e.html 批处理隐藏运行的10种思路 1.基础 HideRun.vbs -------------------------------------------------- ------------------------------ CreateObject("WScript.Shell").Run "cmd /cD:\test.bat",0 其中D:\test.bat是你的批处理路径 HideRun.bat -------------------------------------------------- ------------------------------ echo CreateObject("WScript.Shell").Run "cmd /cD:\test.bat",0>$tmp.vbs cscript.exe /e:vbscript $tmp.vbs del $tmp.vbs 这个批处理其实不能使其批处理本身隐藏,但是下面大部分隐藏调用批处理的原理和基础。 HideRun.js -------------------------------------------------- ------------------------------ new ActiveXObject('WScript.Shell').Run('cmd /cD:\Test.bat',0); 用Javascript有什么好处呢?js的字符串变量可以用单引号,从而方便命令行作为参数调用,而且js很好的支持多行语句用 ; 分隔写成一行。要注意的是:js要区分大小写,方法必须用括号,结尾必须有分号。所以就成了下面的命令: -------------------------------------------------- ------------------------------ mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /cD:\test.bat',0);window.close()" 2.用快捷方式 如果要使一个批处理本身隐藏,可以参考附件里的一个快捷方式,修改附件中的相关路径即可隐藏启动你的批处理。可以用vbs来建立一个 .lnk,其实用批处理也行(先echo一个vbs出来) 3.利用系统服务 可以用sc建立一个系统服务然后启动这个服务来启动批处理。缺点是启动服务较慢,需要管理员权限 查考这个帖子, http://www.cn-dos.net/forum/view ... =%E6%9C%8D%E5%8A%A1 asbai 兄的大作,极大的方便了我们的使用。 CODE: [Copy to clipboard] -------------------------------------------------- ------------------------------ runassrv add /cmdline:"C:\Windows\System32\cmd.exe /cD:\test.bat" /name:"mysrv" net start mysrv 4.利用at计划任务 用at可以建立一个计划任务,在不输入 /interactive 参数可以后台运行。但是建使用at必须有管理员权限 CODE: [Copy to clipboard] -------------------------------------------------- ------------------------------ at 09:10 "cmd /cD:\Test.bat" 然后在 9:10 系统就会自动后台以SYSTEM权限运行这个bat 5.利用ftype文件关联 综合上面的技术,使所有批处理都隐藏运行 CODE: [Copy to clipboard] -------------------------------------------------- ------------------------------ ftype batfile=C:\Windows\System32\mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c%1',0);window.close();" 大家可以讨论下下面的思路,目前没有明确的方法,但是理论上是可行的 6.rundll32 其实这个方法只是理论上估计的,这里提出来占个位置,留个记号,等待高手研究 rundll32可以调用 dll 里的API,如果有个dll可以隐藏run一个exe就可以实现隐藏启动批处理,呵呵。目前我也没找到方法。 7.其他用户 Windows 2k/XP支持多用户,如果能在后台登陆另一个账户的桌面然后运行一个批处理,就能完全达到隐藏的目的 8.bat2vbs 这个方法只是一个不是很成熟的思路。 查考这个帖子: http://www.cn-dos.net/forum/view ... p;highlight=exe2bat 这使我们产生了一个想法:把bat转换成vbs,然后vbs生成一个临时bat文件,然后WScript.Shell.Run隐藏启动这个临时bat 9. .NET编译 参考这个帖子: http://www.cn-dos.net/forum/view ... hlight=script%2Bnet 里面提到了一个 .NET Warpper,我们完全可以利用系统自带的组件把bat编译到 exe 当中。如果bat不涉及交互,exe自然就安静的运行了。 10.注入汇编 最后向大家推出的今天最隆重的,ASCII Assembly Code专家 Herbert Kleebauer 的又一力作:showwin.exe Quote: showwin.exe let you minimize/maximize/hide the command window within a batch program (requires W2k or better). Usage: showwin.exe number 0 SW_HIDE Hides the window and activates another window. 1 SW_SHOWNORMAL Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when displaying the window for the first time. 2 SW_SHOWMINIMIZED Activates the window and displays it as a minimized window. 3 SW_MAXIMIZE Maximizes the specified window. 3 SW_SHOWMAXIMIZED Activates the window and displays it as a maximized window. 4 SW_SHOWNOACTIVATE Displays a window in its most recent size and position. This value is similar to SW_SHOWNORMAL, except the window is not actived. 5 SW_SHOW Activates the window and displays it in its current size and position. 6 SW_MINIMIZE Minimizes the specified window and activates the next top-level window in the Z order. 7 SW_SHOWMINNOACTIVE D