_ 7-Zip 单文件自解压绿色便携安装包打包压缩工具___2025年11月15日
7-Zip 单文件自解压绿色便携安装包打包压缩工具_2025年11月15日
曾经我女儿问我会不会编程,针对这个问题我今天花费半天左右的时间写了这段代码,算是做一个回答,同时也是便于我今后批量打包绿色便携应用程序软件。








其实所有的单文件自解压绿色便携安装包打包压缩工具都差不多,我之所以选择 7-Zip 而不用 WinRAR 是应为 7-Zip 可以免费使用。我这个打包工具分别用 Delphi 7 、AutoHoteky 、AutoIT 、VC6.0 、VB6.0 、C# 等各种编程语言各自独立编程,独立实现,实现原理差不多,只不过有的要用到外部工具,有的则完全又语言本身纯代码实现,我最喜欢的是Delphi 7 的版本。
网上的压缩打包工具泛滥成灾,为什么我还要另外再手工制作一个呢?主要是为了实现一键打包,重命名、鼠标拖放、单击制作按钮就可以一键生成exe自解压程序包,拖放文件夹识别与路径填写、压缩文件夹、生成自解压命令配置文件、合并自解压模块、自解压命令配置文件和压缩包、替换自解压程序图标,这5个动作都批量自动完成,大量打包时非常方便快捷。
不绿色的应用程序软件可以利用 TotalUninstall 、RegistryChangesView 、InstallRite 2.5c等注册表和文件夹监控监视嗅探工具软件 改造成绿色免安装的应用程序软件。配置不稳定的应用程序软件可以利用BAT批处理脚本、AutoHotkey自动化热键脚本、AutoIT3 、Delphi 7 等编程工具制作成强壮稳定可靠的软件。例如:在部署GoodSync2Go实时单向备份软件和FreeFileSync实时双向同步软件时 可以通过删除配置文件和覆盖复制配置文件和覆盖注册表记录项目来保持配置的稳定性。可以循环监视(SetTimmer IF Process Exist)来保持程序和服务一直运行。
; //此应用程序大量引用了DeepSeek、DeepSeek Coder、
; ChatGPT、Claude、Gemini、GitHub Copilot、Kimi、
; Tabnine、CodeWhisperer、Amazon CodeWhisperer、
; SourceGraph Cody、Replit AI、文心一言、通义千问、
; 豆包、腾讯元宝等AI编程对话工具,在此对AI开发者和部署者表示感谢。
/*7-Zip 单文件自解压绿色便携安装包打包压缩工具_2025年11月15日
其实所有的单文件自解压绿色便携安装包打包压缩工具都差不多,我之所以选择 7-Zip 而不用 WinRAR 是应为 7-Zip 可以免费使用。我这个打包工具分别用 Delphi 7 、AutoHoteky 、AutoIT 、VC6.0 、VB6.0 、C# 等各种编程语言各自独立编程,独立实现,实现原理差不多,只不过有的要用到外部工具,有的则完全又语言本身纯代码实现,我最喜欢的是Delphi 7 的版本。
网上的压缩打包工具泛滥成灾,为什么我还要另外再手工制作一个呢?主要是为了实现一键打包,重命名、鼠标拖放、单击制作按钮就可以一键生成exe自解压程序包,拖放文件夹识别与路径填写、压缩文件夹、生成自解压命令配置文件、合并自解压模块、自解压命令配置文件和压缩包、替换自解压程序图标,这5个动作都批量自动完成,大量打包时非常方便快捷。
不绿色的应用程序软件可以利用 TotalUninstall 、RegistryChangesView 、InstallRite 2.5c等注册表和文件夹监控监视嗅探工具软件 改造成绿色免安装的应用程序软件。配置不稳定的应用程序软件可以利用BAT批处理脚本、AutoHotkey自动化热键脚本、AutoIT3 、Delphi 7 等编程工具制作成强壮稳定可靠的软件。例如:在部署GoodSync2Go实时单向备份软件和FreeFileSync实时双向同步软件时 可以通过删除配置文件和覆盖复制配置文件和覆盖注册表记录项目来保持配置的稳定性。可以循环监视(SetTimmer IF Process Exist)来保持程序和服务一直运行。
*/
;=========================
; AutoHotkey_1.1.37.02_setup.exe MD5: C2E80
; Windows 10 企业版 LTSC 版本 21H2
; //此应用程序大量引用了DeepSeek、DeepSeek Coder、
; ChatGPT、Claude、Gemini、GitHub Copilot、Kimi、
; Tabnine、CodeWhisperer、Amazon CodeWhisperer、
; SourceGraph Cody、Replit AI、文心一言、通义千问、
; 豆包、腾讯元宝等AI编程对话工具,在此对AI开发者和部署者表示感谢。
/*函数名: Single
设置互斥体,阻止脚本重复运行
功能与#SingleInstance差不多,只是这玩样可以自定义
另:
经测试发现#SingleInstance只识别脚本文件名,改名可重复运行,
在有热键的脚本里要使用 #SingleInstance,off 关闭此功能.
参数:
给这个脚本设置一个独一无二的识别字符串(指纹?)
返回值: 1 为重复,0为第一次
例子:
Single("7EF47F0D-4D37-542E-5787-90FDD196D04B")
Single("123")
*/
Single(flag) { ;,返回1为重复,返回0为第一个运行
DllCall("CreateMutex", "Ptr",0, "int",0, "str", "Ahk_Single_" flag)
return A_LastError=0xB7 ? true : false
}
;=========================
;使用案例,脚本改名都没用,照样只能运行一个.
#SingleInstance,Off ;关闭自带互斥功能
if (Single("56218793")) { ;独一无二的字符串用于识别脚本,或者称为指纹?
MsgBox,16,提示,程序已启动!`n请勿重复运行
ExitApp
}
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
DetectHiddenWindows,On
SetTitleMatchMode,2
;=========================
#NoEnv
#SingleInstance Force
SendMode Input
SetWorkingDir, %A_ScriptDir%
FileCreateDir,%A_ScriptDir%\sfx\
; 创建GUI窗口 - 添加拖放支持
Gui, +Resize +MinSize400x300 +OwnDialogs
Gui, Add, Text, x10 y10 w380 h30, 将文件夹拖放到此窗口进行压缩
Gui, Add, Edit, x10 y40 w380 h50 vFolderPath ReadOnly,
Gui, Add, Button, x150 y250 w100 h30 gStartCompression, 开始压缩
Gui, Add, StatusBar,, 就绪
Gui, Show, w400 h300, 文件夹压缩工具
return
; GUI关闭事件
GuiClose:
; MsgBox, 窗口已关闭,脚本将退出。
ExitApp
return
; 拖放支持 - 修复版本
GuiDropFiles:
; 清除编辑框内容
GuiControl,, FolderPath,
; 处理拖放的文件
loop, Parse, A_GuiEvent, `n
{
FileAttrib := FileExist(A_LoopField)
if InStr(FileAttrib, "D") ; 如果是文件夹
{
SelectedFolder := A_LoopField
GuiControl,, FolderPath, %SelectedFolder%
SB_SetText("已选择文件夹: " SelectedFolder)
break
}
else ; 如果是文件,获取其所在文件夹
{
SplitPath, A_LoopField, , ParentFolder
if FileExist(ParentFolder)
{
SelectedFolder := ParentFolder
GuiControl,, FolderPath, %SelectedFolder%
SB_SetText("已选择文件夹: " SelectedFolder)
break
}
}
}
return
; 开始压缩
StartCompression:
Gui, Submit, NoHide
GuiControlGet, FolderPath
if !FolderPath
{
MsgBox, 48, 错误, 请先拖放一个文件夹到窗口
return
}
if !FileExist(FolderPath)
{
MsgBox, 48, 错误, 文件夹不存在:%FolderPath%
return
}
SevenZipExe=%A_ScriptDir%\7z.exe
; 压缩文件夹
CompressFolder(FolderPath, SevenZipExe)
; 获取文件夹名称
SplitPath, FolderPath, FolderName
; 替换exe图标
ReplaceIconCommandLine(A_ScriptDir . "\" . FolderName . ".exe",A_ScriptDir . "\" . FolderName . ".exe",A_ScriptDir . "\" . FolderName . "\" . FolderName . ".ico")
MsgBox,0,成功,制作已完成,2
Run,%A_ScriptDir%\
ExitApp
return
ReplaceIconCommandLine(sourceExe, targetExe, iconFile) {
resHacker := "ResourceHacker.exe"
IfNotExist, %resHacker%
{
resHacker := A_ScriptDir . "\ResourceHacker.exe"
IfNotExist, %resHacker%
{
resHacker := "C:\Program Files\Resource Hacker\ResourceHacker.exe"
IfNotExist, %resHacker%
{
MsgBox, 未找到 ResourceHacker.exe`n请下载并放在脚本同目录
return false
}
}
}
try {
command = "%resHacker%" -open "%sourceExe%" -save "%targetExe%" -action addoverwrite -res "%iconFile%" -mask ICONGROUP,MAINICON,
RunWait, %command%, , Hide
return true
} catch {
MsgBox, 执行命令时出错
return false
}
}
; 压缩文件夹函数
CompressFolder(FolderPath, SevenZipExe) {
SB_SetText("正在准备压缩...")
; 获取文件夹名称
SplitPath, FolderPath, FolderName
; 设置输出压缩包路径
OutputArchive := A_ScriptDir . "\" . FolderName . ".7z"
; 如果压缩包已存在,先删除
; if FileExist(OutputArchive)
; {
; FileDelete, %OutputArchive%
; }
; 构建7-zip命令
Command = %SevenZipExe% a -r %OutputArchive% %FolderPath%\
SB_SetText("正在压缩... 请稍候...")
; 执行压缩命令
RunWait, %ComSpec% /c %Command%,,Hide
; 提取exe图标
; 获取文件夹名称
SplitPath, FolderPath, FolderName
; 如果图标文件已存在,先删除
if FileExist(FolderPath . "\" . FolderName . ".ico")
{
FileDelete,%FolderPath%\%FolderName%.ico
}
Run,%A_ScriptDir%\Quick_Any2Ico.exe %FolderPath%\%FolderName%.exe
Sleep,500
;点击控件
; ControlClick, Button3, Quick Any2Ico
; ControlClick, Button3,ahk_class QUICK_ANY2ICO
; ControlSend, Button3,{space}, Quick Any2Ico
ControlSend, Button3,{Space},ahk_class QUICK_ANY2ICO
Sleep,2000
WinClose,Quick Any2Ico ahk_class QUICK_ANY2ICO
; 构建自解压打包配置文件 7zSFXConfig.txt
; 配置文件内容
configContent =
(
;!@Install@!UTF-8!
Title="我的应用程序"
ExecuteFile="D:\\APP\\%FolderName%\\"
ExecuteParameters=""
GUIMode="2"
InstallPath="D:\\APP"
;!@InstallEnd@!
)
; 写入配置文件
; 如果自解压打包配置文件已存在,先删除
if FileExist(A_ScriptDir . "\7zSFXConfig.txt")
{
FileDelete, %A_ScriptDir%\7zSFXConfig.txt
}
; 为了支持中文文件夹目录,在文件末尾处追加(写入)
; 文本(如果有必要, 首先创建文件).指定编码或编码页,
; 例如 UTF-8, UTF-16 或 CP936.如果文件包含 UTF-8 或
; UTF-16 字节顺序标记(BOM), 则忽略此参数和默认编码.
FileAppend, %configContent%, %A_ScriptDir%\7zSFXConfig.txt, UTF-8
; 制作自解压包
Command2 = copy /b %A_ScriptDir%\7zsd_LZMA2.sfx + %A_ScriptDir%\7zSFXConfig.txt + %OutputArchive% %A_ScriptDir%\%FolderName%.exe
RunWait, %ComSpec% /c %Command2%,,Hide
}
7-Zip 单文件自解压绿色便携安装包打包压缩工具_2025年11月15日
其实所有的单文件自解压绿色便携安装包打包压缩工具都差不多,我之所以选择 7-Zip 而不用 WinRAR 是应为 7-Zip 可以免费使用。我这个打包工具分别用 Delphi 7 、AutoHoteky 、AutoIT 、VC6.0 、VB6.0 、C# 等各种编程语言各自独立编程,独立实现,实现原理差不多,只不过有的要用到外部工具,有的则完全又语言本身纯代码实现,我最喜欢的是Delphi 7 的版本。
网上的压缩打包工具泛滥成灾,为什么我还要另外再手工制作一个呢?主要是为了实现一键打包,重命名、鼠标拖放、单击制作按钮就可以一键生成exe自解压程序包,拖放文件夹识别与路径填写、压缩文件夹、生成自解压命令配置文件、合并自解压模块、自解压命令配置文件和压缩包、替换自解压程序图标,这5个动作都批量自动完成,大量打包时非常方便快捷。
不绿色的应用程序软件可以利用 TotalUninstall 、RegistryChangesView 、InstallRite 2.5c等注册表和文件夹监控监视嗅探工具软件 改造成绿色免安装的应用程序软件。配置不稳定的应用程序软件可以利用BAT批处理脚本、AutoHotkey自动化热键脚本、AutoIT3 、Delphi 7 等编程工具制作成强壮稳定可靠的软件。例如:在部署GoodSync2Go实时单向备份软件和FreeFileSync实时双向同步软件时 可以通过删除配置文件和覆盖复制配置文件和覆盖注册表记录项目来保持配置的稳定性。可以循环监视(SetTimmer IF Process Exist)来保持程序和服务一直运行。
; //此应用程序大量引用了DeepSeek、DeepSeek Coder、
; ChatGPT、Claude、Gemini、GitHub Copilot、Kimi、
; Tabnine、CodeWhisperer、Amazon CodeWhisperer、
; SourceGraph Cody、Replit AI、文心一言、通义千问、
; 豆包、腾讯元宝等AI编程对话工具,在此对AI开发者和部署者表示感谢。
/*7-Zip 单文件自解压绿色便携安装包打包压缩工具_2025年11月15日
其实所有的单文件自解压绿色便携安装包打包压缩工具都差不多,我之所以选择 7-Zip 而不用 WinRAR 是应为 7-Zip 可以免费使用。我这个打包工具分别用 Delphi 7 、AutoHoteky 、AutoIT 、VC6.0 、VB6.0 、C# 等各种编程语言各自独立编程,独立实现,实现原理差不多,只不过有的要用到外部工具,有的则完全又语言本身纯代码实现,我最喜欢的是Delphi 7 的版本。
网上的压缩打包工具泛滥成灾,为什么我还要另外再手工制作一个呢?主要是为了实现一键打包,重命名、鼠标拖放、单击制作按钮就可以一键生成exe自解压程序包,拖放文件夹识别与路径填写、压缩文件夹、生成自解压命令配置文件、合并自解压模块、自解压命令配置文件和压缩包、替换自解压程序图标,这5个动作都批量自动完成,大量打包时非常方便快捷。
不绿色的应用程序软件可以利用 TotalUninstall 、RegistryChangesView 、InstallRite 2.5c等注册表和文件夹监控监视嗅探工具软件 改造成绿色免安装的应用程序软件。配置不稳定的应用程序软件可以利用BAT批处理脚本、AutoHotkey自动化热键脚本、AutoIT3 、Delphi 7 等编程工具制作成强壮稳定可靠的软件。例如:在部署GoodSync2Go实时单向备份软件和FreeFileSync实时双向同步软件时 可以通过删除配置文件和覆盖复制配置文件和覆盖注册表记录项目来保持配置的稳定性。可以循环监视(SetTimmer IF Process Exist)来保持程序和服务一直运行。
*/
;=========================
; AutoHotkey_1.1.37.02_setup.exe MD5: C2E80
; Windows 10 企业版 LTSC 版本 21H2
; //此应用程序大量引用了DeepSeek、DeepSeek Coder、
; ChatGPT、Claude、Gemini、GitHub Copilot、Kimi、
; Tabnine、CodeWhisperer、Amazon CodeWhisperer、
; SourceGraph Cody、Replit AI、文心一言、通义千问、
; 豆包、腾讯元宝等AI编程对话工具,在此对AI开发者和部署者表示感谢。
/*函数名: Single
设置互斥体,阻止脚本重复运行
功能与#SingleInstance差不多,只是这玩样可以自定义
另:
经测试发现#SingleInstance只识别脚本文件名,改名可重复运行,
在有热键的脚本里要使用 #SingleInstance,off 关闭此功能.
参数:
给这个脚本设置一个独一无二的识别字符串(指纹?)
返回值: 1 为重复,0为第一次
例子:
Single("7EF47F0D-4D37-542E-5787-90FDD196D04B")
Single("123")
*/
Single(flag) { ;,返回1为重复,返回0为第一个运行
DllCall("CreateMutex", "Ptr",0, "int",0, "str", "Ahk_Single_" flag)
return A_LastError=0xB7 ? true : false
}
;=========================
;使用案例,脚本改名都没用,照样只能运行一个.
#SingleInstance,Off ;关闭自带互斥功能
if (Single("56218793")) { ;独一无二的字符串用于识别脚本,或者称为指纹?
MsgBox,16,提示,程序已启动!`n请勿重复运行
ExitApp
}
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
DetectHiddenWindows,On
SetTitleMatchMode,2
;=========================
#NoEnv
#SingleInstance Force
SendMode Input
SetWorkingDir, %A_ScriptDir%
FileCreateDir,%A_ScriptDir%\sfx\
; 创建GUI窗口 - 添加拖放支持
Gui, +Resize +MinSize400x300 +OwnDialogs
Gui, Add, Text, x10 y10 w380 h30, 将文件夹拖放到此窗口进行压缩
Gui, Add, Edit, x10 y40 w380 h50 vFolderPath ReadOnly,
Gui, Add, Button, x150 y250 w100 h30 gStartCompression, 开始压缩
Gui, Add, StatusBar,, 就绪
Gui, Show, w400 h300, 文件夹压缩工具
return
; GUI关闭事件
GuiClose:
; MsgBox, 窗口已关闭,脚本将退出。
ExitApp
return
; 拖放支持 - 修复版本
GuiDropFiles:
; 清除编辑框内容
GuiControl,, FolderPath,
; 处理拖放的文件
loop, Parse, A_GuiEvent, `n
{
FileAttrib := FileExist(A_LoopField)
if InStr(FileAttrib, "D") ; 如果是文件夹
{
SelectedFolder := A_LoopField
GuiControl,, FolderPath, %SelectedFolder%
SB_SetText("已选择文件夹: " SelectedFolder)
break
}
else ; 如果是文件,获取其所在文件夹
{
SplitPath, A_LoopField, , ParentFolder
if FileExist(ParentFolder)
{
SelectedFolder := ParentFolder
GuiControl,, FolderPath, %SelectedFolder%
SB_SetText("已选择文件夹: " SelectedFolder)
break
}
}
}
return
; 开始压缩
StartCompression:
Gui, Submit, NoHide
GuiControlGet, FolderPath
if !FolderPath
{
MsgBox, 48, 错误, 请先拖放一个文件夹到窗口
return
}
if !FileExist(FolderPath)
{
MsgBox, 48, 错误, 文件夹不存在:%FolderPath%
return
}
SevenZipExe=%A_ScriptDir%\7z.exe
; 压缩文件夹
CompressFolder(FolderPath, SevenZipExe)
; 获取文件夹名称
SplitPath, FolderPath, FolderName
; 替换exe图标
ReplaceIconCommandLine(A_ScriptDir . "\" . FolderName . ".exe",A_ScriptDir . "\" . FolderName . ".exe",A_ScriptDir . "\" . FolderName . "\" . FolderName . ".ico")
MsgBox,0,成功,制作已完成,2
Run,%A_ScriptDir%\
ExitApp
return
ReplaceIconCommandLine(sourceExe, targetExe, iconFile) {
resHacker := "ResourceHacker.exe"
IfNotExist, %resHacker%
{
resHacker := A_ScriptDir . "\ResourceHacker.exe"
IfNotExist, %resHacker%
{
resHacker := "C:\Program Files\Resource Hacker\ResourceHacker.exe"
IfNotExist, %resHacker%
{
MsgBox, 未找到 ResourceHacker.exe`n请下载并放在脚本同目录
return false
}
}
}
try {
command = "%resHacker%" -open "%sourceExe%" -save "%targetExe%" -action addoverwrite -res "%iconFile%" -mask ICONGROUP,MAINICON,
RunWait, %command%, , Hide
return true
} catch {
MsgBox, 执行命令时出错
return false
}
}
; 压缩文件夹函数
CompressFolder(FolderPath, SevenZipExe) {
SB_SetText("正在准备压缩...")
; 获取文件夹名称
SplitPath, FolderPath, FolderName
; 设置输出压缩包路径
OutputArchive := A_ScriptDir . "\" . FolderName . ".7z"
; 如果压缩包已存在,先删除
; if FileExist(OutputArchive)
; {
; FileDelete, %OutputArchive%
; }
; 构建7-zip命令
Command = %SevenZipExe% a -r %OutputArchive% %FolderPath%\
SB_SetText("正在压缩... 请稍候...")
; 执行压缩命令
RunWait, %ComSpec% /c %Command%,,Hide
; 提取exe图标
; 获取文件夹名称
SplitPath, FolderPath, FolderName
; 如果图标文件已存在,先删除
if FileExist(FolderPath . "\" . FolderName . ".ico")
{
FileDelete,%FolderPath%\%FolderName%.ico
}
Run,%A_ScriptDir%\Quick_Any2Ico.exe %FolderPath%\%FolderName%.exe
Sleep,500
;点击控件
; ControlClick, Button3, Quick Any2Ico
; ControlClick, Button3,ahk_class QUICK_ANY2ICO
; ControlSend, Button3,{space}, Quick Any2Ico
ControlSend, Button3,{Space},ahk_class QUICK_ANY2ICO
Sleep,2000
WinClose,Quick Any2Ico ahk_class QUICK_ANY2ICO
; 构建自解压打包配置文件 7zSFXConfig.txt
; 配置文件内容
configContent =
(
;!@Install@!UTF-8!
Title="我的应用程序"
ExecuteFile="D:\\APP\\%FolderName%\\"
ExecuteParameters=""
GUIMode="2"
InstallPath="D:\\APP"
;!@InstallEnd@!
)
; 写入配置文件
; 如果自解压打包配置文件已存在,先删除
if FileExist(A_ScriptDir . "\7zSFXConfig.txt")
{
FileDelete, %A_ScriptDir%\7zSFXConfig.txt
}
FileAppend, %configContent%, %A_ScriptDir%\7zSFXConfig.txt
; 制作自解压包
Command2 = copy /b %A_ScriptDir%\7zsd_LZMA2.sfx + %A_ScriptDir%\7zSFXConfig.txt + %OutputArchive% %A_ScriptDir%\%FolderName%.exe
RunWait, %ComSpec% /c %Command2%,,Hide
}
https://www.autoahk.com/archives/53333
https://www.cnblogs.com/delphixx/p/19224965

浙公网安备 33010602011771号