• 用批处理安装卸载程序


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

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

    偶尔用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%SysWOW64cmd /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%SysWOW64cmd /c "卸载.bat"
        )
    echo 卸载完毕
    pause
    exit

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

    导入已经修改好的注册表文件:
    reg import "user 1导入.reg"
    使用当前目录作为注册表数据:
    reg add HKLMSOFTWAREMicrosoftWindowsHelp /v d5corba.hlp /d "%cd%Help" /f
    reg add HKLMSOFTWAREMicrosoftWindowsCurrentVersionSharedDlls /v "%~dp0sys32dss50.bpl" /t REG_dword /d 1 /f
    删除注册表数据:
    reg delete "HKCUSOFTWARESoftwareBorlandDelphi5.0" /va /f

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

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

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

    创建快捷方式:

    @echo off
    for,/f,"skip=1 tokens=1,2,*",%%a,in,('reg query "HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders" /v Desktop'),do,( 
        @set PathAll_=%%c
        )
    start uushortcut.exe /f:"%PathAll_%Delphi5 Green.lnk" /a:c /t:"%cd%Bindelphi32.exe"
    rem 修改过桌面路径的操作系统不能用start uushortcut.exe /f:"%USERPROFILE%DesktopDelphi5 Green.lnk" /a:c /t:"%cd%Bindelphi32.exe"

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

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

  • 相关阅读:
    编程珠玑:单词频率最高选取
    编程之美:求二进制中1的个数
    编程珠玑:用后缀数组寻找最长重复字符串
    编程珠玑:变位词程序的实现
    编程珠玑:位图法排序
    Hadoop 2.0 代码:Client端代码简要分析
    编程之美:求数组的子数组之和的最大值
    经典正则表达式
    C#下实现动态系统托盘图标
    HTTPBrowserCapabilities在asp.net中显示浏览器属性
  • 原文地址:https://www.cnblogs.com/unjiang/p/7729308.html
Copyright © 2020-2023  润新知