无忧启动论坛

标题: 批处理+WINRAR制作自解压文件并自爆(自删除)的土办法 [打印本页]

作者: acalephe    时间: 2013-4-12 21:42
标题: 批处理+WINRAR制作自解压文件并自爆(自删除)的土办法
本帖最后由 acalephe 于 2014-4-29 18:48 编辑

简单批处理+WINRAR制作自解压文件并自爆(自删除)的土办法,自己给自己剃头。

产生这个想法的原因是制作内存系统RAMOS,一些常用的软件想把它放在内存,但有时临时想安点软件必须用到系统盘,又想再挤挤牙膏,节约点儿空间,因为有些程序并不是同时要用到的。

整个过程分三步:
1.        制作一个批处理文件,用BAT转exe工具转为exe可执行文件,该文件可通用,批处理命令非常简单
@ECHO OFF
MLD.bat  
//这是第二步要用的批处理文件名,与本exe文件放在同一目录下
EXIT

2.        制作中间的批处理文件,为了方便修改,不建议转为exe可执行文件
@ECHO OFF
if "%1"=="h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin  
//不显示DOS的黑窗口
for /l %%i in (1,1,100) do echo %%i >nul  
//计数1累加到100,延时用,不延时电脑可能不运行下一步,100这个数字可以稍微增大点,多用不了什么时间。
taskkill /f /im UnicornViewer.exe  
//该命令强行结束前一步的exe文件,方便自解压文件解压后使用原文件名,如果不结束,自解压文件替换时就会出错,这是关键之处,这里以UnicornViewer为例。
for /l %%i in (1,1,100) do echo %%i >nul  
//延时。
CALL SLF.EXE
//运行自解压文件,只要与此处文件名相同即可,此处使用SLF.EXE。
for /l %%i in (1,1,100) do echo %%i >nul  
//延时。
del slf.exe /f  
//删除自解压文件。
del %0
//删除本批处理文件自身。
EXIT

3.        用WINRAR制作自解压文件时,选择采用后台运行、完全覆盖的方式,并且令其在解压后运行原文件名,这里是UnicornViewer.exe,这样运行时屏幕只会闪几下而不会出现选择性窗口。
这是自解压文件的的说明:
Setup=UnicornViewer
Silent=1
Overwrite=1

这样就实现自解压并自爆了,当然方法很土了。而且也不是每试必灵的,我在做office绿色版时就遇到问题,如果用excel.exe和powerpnt.exe来解压这个压缩文件就没问题,如果用winword.exe的名称,taskkill就不能强行结束它,但改成word.exe就可以结束,可能是有win这个关键字符,被系统规避了,大多数软件都能够成功,想用NTSD又嫌麻烦,有兴趣可以试试。
有时如果制作不成功,可以把延时增加一些,或者删掉隐藏DOS窗口的几行(隐藏窗口还可以通过在系统中安装DOS强化工具nircmd来实现,这样就需要将第一步的第二行改为:nircmd execmd MLD.BAT)。
桌面快捷方式图标会变成你冒名文件的图标,很难看哦,所以可以用图标工具把源可执行文件的图标提取出来,在第一步用BAT变成EXE时修改为该图标。

示例文件:

http://pan.baidu.com/share/link?shareid=445792&uk=2031006351
作者: singel    时间: 2013-4-13 00:32
多谢楼主分享,不过俺用不到,哈
作者: 不才    时间: 2013-4-13 09:15
嘿嘿,有点意思。谢谢楼主分享!
作者: 2012peter2    时间: 2013-4-13 09:21
支持原创,这是进步的灵魂。
作者: acalephe    时间: 2013-10-22 17:00
顶上ke
作者: 2012m2888    时间: 2013-12-9 00:10
谢谢楼主分享!
作者: 朱百亿    时间: 2014-1-12 22:52
不知道楼主说的是什么
不明觉厉,细思恐极
作者: 2010Enun    时间: 2014-1-20 01:07
rar打包这个批处理试试

  1. @echo off
  2. set zPath="%~0"
  3. for /f "usebackq skip=1 delims=" %%i in (
  4.         `"wmic process where commandline='cmd /c "%zPath:\=\\% "' get ParentProcessId /value"`
  5.         ) do (
  6.         call set "%%i" > NUL
  7. )

  8. for /f "usebackq skip=1 delims=" %%o in (
  9.         `"wmic process where processid=%ParentProcessId% get ExecutablePath /value"`
  10.         ) do (
  11.         call set "%%o" > NUL
  12. )

  13. echo "%ExecutablePath%"

  14. ping 127.0.0.1 -n 2 >nul
  15. del /s /f /q "%ExecutablePath%"

  16. ping 127.0.0.1 -n 2 >nul
  17. del /s /f /q "%0"
  18. pause
复制代码





欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3