本帖最后由 winsfly 于 2020-1-8 23:31 编辑
最近因为有一款破解软件是个绿色不要安装的文件夹, 个人想把它打包成exe, 运行完会自动清除解压目录,配置文件还有报告文件等,真正做到一键运行,不会产生垃圾.
想到用winrar自解压,动手做, 第一次直接调用一个批处理bit.cmd 代码如下:- for /f "tokens=1,2 delims=:" %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do (
- set docq=%%a
- set docp=%%b
- )
- set doc=%docq:~-1%:%docp%
- if not exist "%doc%\PassMark\BurnInTest" md "%doc%\PassMark\BurnInTest"
- copy LastUsed.bitcfg "%doc%\PassMark\BurnInTest\" /y>nul 2>nul
-
- start "" bit_cn.exe
- goto wait
-
- :wait
- qprocess|findstr /i bit_cn.exe >nul
- if %errorlevel%==0 (goto jiankong) else (goto wait)
-
-
- :jiankong
- qprocess|findstr /i bit_cn.exe >nul
- if %errorlevel%==0 (goto jiankong) else (goto shanchu)
-
- :shanchu
- if exist "C:\BurnInTest test files" rd /s /q "C:\BurnInTest test files"
- rd /s /q "%doc%\PassMark"
- cd ..&&rd /s /q %~dp0
- exit
复制代码 代码解说:自解压后先把预先做好的配置文件复制到我的文档下面(软件固定了配置目录不能修改),然后就运行主程序bit_cn.exe
紧跟着批处理用qprocess检测bit_cn.exe是否存在进程,这个主进程完成任务关闭后,批处理会自动删除自解压目录C:\burnintest, 配置文件"%doc%\PassMark\BurnInTest\LastUsed.bitcfg",报告文件"C:\BurnInTest test files".
下面详细说说碰到的问题:
一 32位系统按照上面做成的自解压exe完全没问题,但是64位系统上问题出在了start "" bit_cn.exe后面, 主程序运行后,批处理中断了;
二 后来用两个批处理解决了这个问题,把上面的批处理做成俩个,一个bit.cmd如下:- for /f "tokens=1,2 delims=:" %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do (
- set docq=%%a
- set docp=%%b
- )
- set doc=%docq:~-1%:%docp%
- if not exist "%doc%\PassMark\BurnInTest" md "%doc%\PassMark\BurnInTest"
- copy LastUsed.bitcfg "%doc%\PassMark\BurnInTest\" /y>nul 2>nul
-
- start cmd /k jiankong.cmd
- start "" bit_cn.exe
复制代码 另外一个jiankong.cmd就自动监控主程序的进程,一旦完成关闭自动清除文件.
三 又出来新问题: 64位系统会提示qprocess不是内部或外部命令, 复制进自解压exe可以解决,但是32位系统又不兼容,
最后想到在jiankong.cmd里面用copy命令判断64位系统就复制qprocess ,- if exist C:\Windows\SysWOW64 copy %windir%\system32\qprocess.exe C:\BurnInTest\ /y
复制代码 ,
四 最终问题:直接运行jiankong.cmd, 可以复制qprocess, 一旦做成自解压exe运行后,会提示找不到文件.
字写了好多, 希望哪位大侠 赏光抽空看一眼, 帮忙解决以下最后一个自解压调用批处理不能复制文件的bug. |