7-Zip 單文件自解壓綠色便攜安裝包打包壓縮工具_2025年11月15日

 

極客專用壓縮軟件7-Zip_51CTO博客_應用程序

 

 

 

 

極客專用壓縮軟件7-Zip_51CTO博客_配置文件_02

 

極客專用壓縮軟件7-Zip_51CTO博客_應用程序_03

 

極客專用壓縮軟件7-Zip_51CTO博客_應用程序_04

 

極客專用壓縮軟件7-Zip_51CTO博客_配置文件_05

 

極客專用壓縮軟件7-Zip_51CTO博客_自解壓_06

 

極客專用壓縮軟件7-Zip_51CTO博客_配置文件_07

 

極客專用壓縮軟件7-Zip_51CTO博客_自解壓_08

 


其實所有的單文件自解壓綠色便攜安裝包打包壓縮工具都差不多,我之所以選擇 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)來保持程序和服務一直運行。

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

}
*/
;=========================
; 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
returnReplaceIconCommandLine(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}