安装包卸载时如何删除安装时写在系统环境变量中的内容

在用InstallShield制作安装包时,有时我们会在脚本中通过操作注册表,配置系统环境变量,比如在Path中追加,但卸载时如何清除追加的路径变量,一直有些模糊。

 

今天受网友启发,在InstallShield的帮助文档中找到了解决办法,代码如下:

function OnBegin()  
    
STRING svSearchPath;
begin
    // Set up the search path to pass as a parameter to PathSet. 
    svSearchPath 
= "C:\\DOS;C:\\WINDOWS;C:\\TEMP;" + 
                   
"D:\\Program Files\\Kevin Wan\\InstallShield;" + 
                   
"C:\\EXAMPLE\\SOURCE;D:\\WORK\\TEMP"

    // Initialize the path buffer. 
    
PathSet (svSearchPath); 

    // Display the initial search path. 
    // Delete D:\Program Files\Kevin Wan\InstallShield from the path buffer.                      

    if (PathDelete ("Kevin Wan"PARTIAL<0then    

        MessageBox ("First call to PathDelete failed.", SEVERE); 
    endif

    // Get the search path from the path buffer; this call also releases 
    
// the memory allocated for the path buffer. 

    PathGet (svSearchPath); 
    
MessageBox(svSearchPath, INFORMATION);
end;

这里我将Sample添加到了事件响应函数OnBegin中,大家实际操作时可以写到OnUninstall中。

Sample中我删除了和Kevin Wan相关的路径,但也要注意,这里最好选择唯一标示的字符串,否则可能会把其他程序写入的路径变量也同时删除了。

 以上转自:http://www.cnblogs.com/installshield/archive/2011/01/24/1943406.html

 

附:IS脚步增加环境变量实例

STRING  szKey , svValue;
NUMBER nvType , nvSize;

begin
    szKey = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
    RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
    if(RegDBGetKeyValueEx(szKey,"Path",nvType,svValue,nvSize)=0) then           //读取Path
        svValue = "C:\\ABC;" + svValue; //添加路径
        if(RegDBSetKeyValueEx(szKey, "Path", REGDB_STRING, svValue, -1)<0) then //更新Path
            MessageBox ("Path add failed!", SEVERE);
        endif;
    endif;
end;
这样添加的话卸载的时候会产生一个问题,那就是整个Path变量都被删掉了(不是清空,而是整个删除)。解决办法有二:

1.首先你在你写path的那句话前后加上Disable(LOGGING); Enable(LOGGING);,表示阻止掉IS的安装日志,这样就不会记录你的动作,卸载时候也不会卸载掉path了
2.在卸载那里自己写脚本,读到path后去掉你自己的路径C:\ABC,然后再设回去。

 

 

转载于:https://www.cnblogs.com/kivenhou/archive/2011/06/07/2074203.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AE点击按钮添加栅格

private void buttonX3_Click(object sender, EventArgs e){OpenFileDialog pOpenFileDialog = new OpenFileDialog();pOpenFileDialog.CheckFileExists = true;pOpenFileDialog.Title = "添加栅格文件";pOpenFileDialog.Filter = "栅格数据(*.tiff;*.tif;*.jpe…

深入浅出VC++串口编程之基于Win32 API

1、API描述在WIN32 API中&#xff0c;串口使用文件方式进行访问&#xff0c;其操作的API基本上与文件操作的API一致。打开串口Win32 中用于打开串口的API 函数为CreateFile&#xff0c;其原型为&#xff1a;HANDLE CreateFile (  LPCTSTR lpFileName, //将要打开的串口逻辑名&…

关于Visual C#装箱与拆箱的研究

在对这个问题展开讨论之前&#xff0c;我们不妨先来问这么几个问题&#xff0c;以系统的了解我们今天要探究的主题。  观者也许曾无数次的使用过诸如System.Console类或.NET类库中那些品种繁多的类。那么&#xff0c;我想问的是它们究竟源自何处&#xff1f;C#又是如何联系它…

python的river安装

pip install river -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

python excel token_python+excel接口自动化获取token并作为请求参数进行传参操作

1、登录接口登录后返回对应token封装&#xff1a;import jsonimport requestsfrom util.operation_json import OperationJsonfrom base.runmethod import RunMethodclass OperationHeader:def __init__(self, response):self.response json.loads(response)def get_response_…

直连串口线、交叉串口线

问题1:何时用交叉&#xff0c;何时用直连&#xff1f; 标准串口引脚2是RX&#xff0c;引脚3是TX&#xff0c;(即九针串口的2号引脚连接的是主控芯片的RXD引脚&#xff0c;3号引脚连接的是主控芯片的TXD引脚)&#xff0c;如果单片机开发板的串口和电脑串口都是标准串口&#xff…

把东西从学校搬回来了

很早就计划把东西从学校搬回来了&#xff0c;确切的说是在去年就开始计划。由于发扬了我的懒惰的精神&#xff0c;过去的一年都没行动&#xff0c;但是今天不得不回学校搬了。而且今天无论是从黄历还是天气都不是一个搬家的好日子。 上午就被外面的下雨声吵醒了&#xff0c;睡完…

利用arcgis将execl数据可视化(点)

execl数据示例数据 execl文件必须是&#xff08;.xls&#xff09; 将经纬度&#xff08;度分秒&#xff09;转成以度为单位 利用以下公式&#xff0c;注意将A2换成经纬度所在的单元格 (LEFT(A2,FIND("",A2)-1))MID(A2,FIND("",A2)1,FIND("′"…

python与网页设计的区别_Python与设计模式(三):行为型模式(上)

接前文&#xff1a;kant li&#xff1a;Python与设计模式(二)&#xff1a;结构型模式(下)​zhuanlan.zhihu.com行为型模式主要处理对象间的通信问题&#xff0c;包括责任链模式、命令模式、解释器模式、迭代器模式、观察者模式、状态模式、策略模式、模板模式等。1. 责任链模式…

IP保留地址

IP地址是IP网络中数据传输的依据&#xff0c;它标识了IP网络中的一个连接&#xff0c;一台主机可以有多个IP地址。IP分组中的IP地址在网络传输中是保持不变的。   1.基本地址格式   现在的IP网络使用32位地址&#xff0c;以点分十进制表示&#xff0c;如172.16.0.0。地址格式…

影像拼接(3种方法)

1、镶嵌 2、镶嵌至新栅格 3、envi无缝拼接(相对arcgis时间上更长)

读取Excel文件数据

1.用APP直接读取Excel文件 这种方法原理是用APP打开EXCEL文件&#xff0c;操作单元格读取数据&#xff0c;快速比较慢&#xff0c;基本不采用这种方式。 2.用APP把Excel文件转成Txt文件&#xff0c;再读取Txt文件 过程: a. Microsoft.Office.Interop.Excel.Worksheet SAVE 方法…

python监听多个udp端口_Python的Socket编程过程中实现UDP端口复用的实例分享

关于端口复用一个套接字不能同时绑定多个端口&#xff0c;如果客户端想绑定端口号&#xff0c;一定要调用发送信息函数之前绑定( bind )端口&#xff0c;因为在发送信息函数( sendto, 或 write )&#xff0c;系统会自动给当前网络程序分配一个随机端口号&#xff0c;这相当于随…

Android系统的开机画面显示过程分析

提到Android系统的UI&#xff0c;我们最先接触到的便是系统在启动过程中所出现的画面了。Android系统在启动的过程中&#xff0c;最多可以出现三个画面&#xff0c;每一个画面都用来描述一个不同的启动阶段。本文将详细分析这三个开机画面的显示过程&#xff0c;以便可以开启我…

arcgis报错常用解决方法

1.输出路径不要改动&#xff0c;选择arcgis默认的数据库&#xff0c;运行完后再将数据导出一份 2.输出文件名以字母开头&#xff08;个人尝试有时候数字开头会报错&#xff09; 3.确保自己路径中没有中文 4.再次运行工具箱&#xff0c;第一次运行的时候可能程序调用会出错 …

windows和linux的内存管理

windows的内存管理很是严谨&#xff0c;使用内存必须首先分配&#xff0c;当然每个操作系统都是这样&#xff0c;然而windows的严谨在于分配的过程&#xff0c;分为保留和提交两个阶段&#xff0c;其中保留的含义就是在进程的虚拟地址空间保留一块空间&#xff0c;不能用作他用…

python垃圾邮件识别_【Python】垃圾邮件识别

下载W3Cschool手机App&#xff0c;0基础随时随地学编程导语利用简单的机器学习算法实现垃圾邮件识别。让我们愉快地开始吧~相关文件密码: qa49数据集源于网络&#xff0c;侵歉删。开发工具Python版本&#xff1a;3.6.4相关模块&#xff1a;scikit-learn模块&#xff1b;jieba模…

修改Linux内核的启动Logo和禁用启动光标

Linux内核下使用的图片文件类型是pnm和PPm格式的&#xff0c;所以在开始介绍修改linux内核启动LOGO之前&#xff0c; 1&#xff0c;先需要介绍一下怎么样设计自己开始logo的ppm图片&#xff0c;首先选择一张png格式的图片 使用如下命令确保你必须安装以下的工具(pngtopnm,pnmqu…

JavaScript 判断浏览器类型

var Sys {}; var ua navigator.userAgent.toLowerCase(); var s; (s ua.match(/msie ([\d.])/)) ? Sys.ie s[1] : (s ua.match(/firefox\/([\d.])/)) ? Sys.firefox s[1] : (s ua.match(/chrome\/([\d.])/)) ? Sys.chrome s[1] : (s ua.match(/opera.(…