Inno Setup卸载时注销bho

Posted hyuganatsu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Inno Setup卸载时注销bho相关的知识,希望对你有一定的参考价值。

Inno setup是一个制作安装包的免费工具,比如你用Qt开发完成一款软件,拿Inno setup打个安装包甩给客户安装就好了。

但是bho插件在注册后,万一用户卸载软件时,bho插件还是躺在管理加载项的列表里面,强迫症的我受不了。。。

特此,记录一下卸载软件时,如何注销bho插件。

#define MyAppUnregName "unregister.bat"

[UninstallRun]
Filename: "{app}{#MyAppUnregName}"

 

其实就是执行一段bat脚本,注销bho插件,顺便将bat内容也贴出来

@echo off
cd /d "%~dp0"
cacls.exe "%SystemDrive%System Volume Information" >nul 2>nul
if %errorlevel%==0 goto Admin
if exist "%temp%getadmin.vbs" del /f /q "%temp%getadmin.vbs"
echo Set RequestUAC = CreateObject^("Shell.Application"^)>"%temp%getadmin.vbs"
echo RequestUAC.ShellExecute "%~s0","","","runas",1 >>"%temp%getadmin.vbs"
echo WScript.Quit >>"%temp%getadmin.vbs"
"%temp%getadmin.vbs" /f
if exist "%temp%getadmin.vbs" del /f /q "%temp%getadmin.vbs"
exit

:Admin
@echo off
set filename=bho.dll
%SystemRoot%Microsoft.NETFrameworkv4.0.30319RegAsm.exe /u "%~dp0"\%filename%

顺便解释一下,从:Admin往上(包括这句)都是请求管理员权限的,否则在win7以上系统(包括win7)直接双击会注册失败,加上那一坨,,就可以直接双击bat了。。

bho是基于.net framework 4.0,所以RegAsm命令直接写死了,若是有更好的办法,请留言分享一下>_<,感激不尽。

"%~dp0"\%filename%是指定bat文件的,其中的各种引号,是因为bat所在的路径有空格(比如在xp系统下,桌面的路径是:“C:Documents and SettingsAdministrator桌面”,总之很变态就是了)会导致注册失败,加个引号就解决了

顺便提一下,注销是/u,注册是/codebase

 

还有一点,若是卸载的时候,顺便想删除用户目录的话,可以用如下代码

#define MyAppDocName "Tax Enterprise"

[UninstallDelete]
Name: "{userdocs}{#MyAppDocName}config"; Type: filesandordirs

这样的话,卸载的时候,我的文档 目录下的"Tax Enterprise"下的config文件夹就不见了,包括config下的文件和文件夹

 

好啰嗦的说。。。

以上是关于Inno Setup卸载时注销bho的主要内容,如果未能解决你的问题,请参考以下文章

Inno setup 卸载时删除程序文件夹(文件)

INNO SETUP卸载时为啥不能强制删除安装目录

使用 inno setup 卸载默认图标

Inno Setup安装卸载时判断是否程序正在运行

防止 Inno Setup 在卸载时删除某些文件

Inno Setup命令行安装卸载参数