惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
G
Google Developers Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
S
SegmentFault 最新的问题
宝玉的分享
宝玉的分享
博客园 - Franky
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
月光博客
月光博客
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
小众软件
小众软件
Microsoft Security Blog
Microsoft Security Blog
Last Week in AI
Last Week in AI
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
爱范儿
爱范儿
J
Java Code Geeks
博客园 - 叶小钗
Engineering at Meta
Engineering at Meta
阮一峰的网络日志
阮一峰的网络日志

博客园 - 姜乂元

Notepad++ 使用 及 插件开发 记录 EverythingSDK中Everything.h转的Everything.pas 可以关闭显示器的软件 win10 x64 解决hlp文件打开问题 支持正则表达式更名的命令行工具 一个类似ALTRun的程序 一个测试程序迭代的故事05 一个测试程序迭代的故事04 一个测试程序迭代的故事03 一个测试程序迭代的故事02 一个测试程序迭代的故事01 Delphi5和Delphi7属性编辑器内存泄漏问题的解决 使用Calibre自带工具批量转换电子书格式 Delphi XE7试用记录2 Delphi XE7试用记录1 开发程序时在主要功能之外应当考虑的问题 开心网外挂 天下的导游一般般 使用delphi5加xkol开发的程序还真小。
用批处理安装卸载程序
姜乂元 · 2017-10-25 · via 博客园 - 姜乂元

一直喜欢用绿色的程序,解压缩就可以用,方便又不向操作系统添加过多东西。

即使不是纯绿色的程序,运行一个批处理或者绿化程序也比原来的安装包方便。

偶尔用Delphi5写点小程序,需要用就安装,不需要就卸载,但是安装卸载有点麻烦。

想做一个绿化程序,觉得有点复杂,而且不通用。

使用安装脚本虽然方便,但还是要重新学专用的脚本语言。

最终还是选择了批处理。

主要步骤:安装Delphi5及升级文件,提取文件及注册表信息,制作批处理(注册DLL,修改Path环境变量,注册表增加一些数据,创建快捷方式)。

提取文件,有些文件在程序目录中,有些在系统的system32中,有些在share中。这些文件统统复制到一起,分别放在子文件夹中。

注册表需要提取的内容在以下几个分支中:Help,SharedDlls,Borland。regedit或Registry_Workshop可以搜索和导出注册表数据。

制作安装和卸载批处理需要一个选择菜单并判断操作系统是32位还是64位。64位的操作系统中,32位的应用程序访问system32路径或注册表HKLM分支,都会转到sysWOW64路径及Wow6432Node分支,不用特殊的api是不能访问system32路径和原注册表项的,Delphi5是32位的,所以要用32位的cmd执行批处理,才会对Delphi5有效。

@echo off
cls
:memu
echo 功能选择
echo ==============================
echo.
echo 输入1,安装Delphi5
echo.
echo 输入2,卸载Delphi5
echo.
echo 输入3,退出
echo.
echo ==============================
rem echo 请输入:
set /p user_input=请输入:

if "%user_input%" equ "1" ( goto setup)
if "%user_input%" equ "2" ( goto unsetup)
if "%user_input%" equ "3" ( exit )
echo.
echo 输入错误,请重新输入。
echo.
goto memu

:setup
    rem 判断64位系统32位系统
    if /i %PROCESSOR_IDENTIFIER:~0,3%==x86 (
        echo 32位操作系统,开始安装。
        start "安装.bat"
    ) else (
        echo 64位操作系统,使用32位cmd执行安装。
        start %WinDir%\SysWOW64\cmd /c "安装.bat"
    )
echo 安装完毕
pause
exit

:unsetup
    rem 判断64位系统32位系统
    if /i %PROCESSOR_IDENTIFIER:~0,3%==x86 (
        echo 32位操作系统,开始卸载。
        start "卸载.bat"
    ) else (
        echo 64位操作系统,使用32位cmd执行卸载。
        start %WinDir%\SysWOW64\cmd /c "卸载.bat"
    )
echo 卸载完毕
pause
exit

注册表数据可以通过导入*.reg文件添加到注册表,但是内容需要预先改好。通过reg命令添加到注册表更加灵活,可以根据当前路径设置数据。有一个工具可以在网上搜索到,Reg2Bat_vbs,可以将导出的注册表文件转成reg命令的批处理。

导入已经修改好的注册表文件:
reg import "user 1导入.reg"
使用当前目录作为注册表数据:
reg add HKLM\SOFTWARE\Microsoft\Windows\Help /v d5corba.hlp /d "%cd%\Help" /f
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls /v "%~dp0sys32\dss50.bpl" /t REG_dword /d 1 /f
删除注册表数据:
reg delete "HKCU\SOFTWARE\Software\Borland\Delphi\5.0" /va /f

*.hlp文件需要注册到操作系统,例如上面的代码,win7以上操作系统还要安装hlp阅读软件的补丁。
*.dll文件可以通过添加注册表数据添加,例如上面的代码,也可以使用regsvr32命令进行注册,但有些文件注册时候提示出错。

修改path环境变量以及创建快捷方式可以使用系统dos命令,但使用第三方工具更方便一点。ShortCut和EditPath两个第三方工具可以在下面网址找到。http://www.bathome.net/s/tool/index.html

添加路径:uu\editpath -au "%cd%\sys32"
删除路径:uu\editpath -ru "%cd%\sys32"
Delphi5需要添加安装文件中system32文件夹和Projects\Bpl文件夹到path环境目录。

创建快捷方式:

@echo off
for,/f,"skip=1 tokens=1,2,*",%%a,in,('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Desktop'),do,( 
    @set PathAll_=%%c
    )
start uu\shortcut.exe /f:"%PathAll_%\Delphi5 Green.lnk" /a:c /t:"%cd%\Bin\delphi32.exe"
rem 修改过桌面路径的操作系统不能用start uu\shortcut.exe /f:"%USERPROFILE%\Desktop\Delphi5 Green.lnk" /a:c /t:"%cd%\Bin\delphi32.exe"

删除快捷方式:if exist "%PathAll_%\Desktop\Delphi5 Green.lnk" (del "%PathAll_%\Desktop\Delphi5 Green.lnk")

“批处理之家”是学些和查询第三方工具的好地方,“脚本之家”是搜索批处理代码的好地方。