我一直在尝试制作批处理文件安装程序。通过将文件嵌入批处理文件中并使用一行more +...
来提取它。
这是我的代码:
@echo off
set self=%~df0
>%userprofile%\desktop\file.exe more +8 "%self%"
echo done!
pause
exit
REM beginning of exe file...
c
sd
€ ~ * 0 ~ * € *’s6 (e
t
€ s.
(/
€ * (f
*^( og
,
(9 oh
*0 K ~ ->~ (i
(j
~ -( þ7 sk
ol
€ Þ(m
Ü~ *
etc...
问题:
我正在尝试提取 GUI exe,但是,提取后,当我尝试运行它时,Windows 会将其视为 16 位程序...为什么会发生这种情况?我该如何修复它?
截图
答案1
正如评论中指出的那样,将可执行程序塞入文本文件会破坏二进制文件。相反,您可以存储编码版本,然后对其进行解码。要轻松实现这一点,您可以使用 PowerShell。从此批处理文件开始:
@echo off
powershell -command "[IO.File]::WriteAllBytes('extracted.exe', [Convert]::FromBase64String((gc '%0')[-1]))"
extracted
del extracted.exe
exit
REM Base64-encoded program will be inserted below
在末尾添加一个额外的空白行。
有趣的部分是 PowerShell 调用。该命令读取批处理文件的内容,取出最后一行,从 Base64 解码,并将这些字节写入名为 的文件extracted.exe
。然后批处理文件只运行该 EXE,完成后它会通过删除临时可执行文件进行清理。
为了使最后一行包含必要的信息,启动 PowerShell,cd
进入批处理文件的目录,然后运行此文件(输入实际文件名和路径):
[Convert]::ToBase64String([IO.File]::ReadAllBytes('C:\fullPathTo\file.exe')) | Out-File 'batchFile.bat' -Append -Encoding ASCII
完成后,您的批处理文件将能够提取该程序并运行它。