Installshield环境变量的追加与删除
来源:互联网 发布:惠州博罗网络问政 编辑:程序博客网 时间:2024/06/06 20:50
====== 环境变量的追加与删除 ======
====== 环境变量的添加或追加 ======
* 问题:如何能在安装包中添加环境变量,而不用用户手动在我的电脑/属性/高级/环境变量中设置,特别是,如何能判断已有的环境变量,如Path,在不改变已有的环境变量的内容的基础上,进行追加呢?
* 解决方案:添加环境变量时,可以通过注册表中相应位置写键值的方式完成:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment.
首先判断Path是否存在,如果不存在,创建,如果存在,已有的内容进行追加。追加的方法参考如下代码:
function AddPath()
NUMBER nResult,nType,nSize,nvSize,nvType;
STRING strResult,szkey,szNumName,szNumValue,nRootKey,szPath,szPath2;
STRING TITLE, szFormat;
begin
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
szkey="SYSTEM\\ControlSet001\\Control\\Session Manager\\Environment";
// has no the key, then create the key
if (RegDBKeyExist(szkey) < 0)then
if (RegDBCreateKeyEx(szkey, "") < 0) then
MessageBox ("RegDBCreateKeyEx failed.", SEVERE);
return FALSE;
endif;
endif;
//添加系统路径
RegDBGetKeyValueEx(szkey,"Path",nvType,szPath,nvSize);
if szPath!="" then
PathSet(szPath);
if (PathAdd(TARGETDIR^"\\scratch\\bin", "", FULL, AFTER) < 0) then
MessageBox ("Unable to add to path buffer.", SEVERE);
abort;
endif;
PathGet(szPath);
Disable(LOGGING);
if (RegDBSetKeyValueEx(szkey,"Path",REGDB_STRING,szPath,-1) < 0) then
MessageBox ("RegDBSetKeyValueEx failed.", SEVERE);
return FALSE;
endif;
Enable(LOGGING);
else
szPath=TARGETDIR^"\\scratch\\bin";
// Set a key name and a value associated with it.
Disable(LOGGING);
if (RegDBSetKeyValueEx(szkey,"Path",REGDB_STRING,szPath,-1) < 0) then
MessageBox ("RegDBSetKeyValueEx failed.", SEVERE);
return FALSE;
endif;
Enable(LOGGING);
endif;
end;
====== 卸载时如何删除追加的环境变量的问题 ======
* 问题:安装包卸载时,如何能不改变已有的环境变量的内容,只是删除追加的环境变量?
* 解决方案:参考如下,特有的关键字删除即可,案参考以下代码片段,即可实现。
function DelPath()
NUMBER nResult,nType,nSize,nvSize,nvType;
STRING strResult,szkey,szNumName,szNumValue,nRootKey,szPath,szPath2;
begin
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
szkey="SYSTEM\\ControlSet001\\Control\\Session Manager\\Environment";
//添加系统路径
RegDBGetKeyValueEx(szkey,"Path",nvType,szPath,nvSize);
if szPath!="" then
PathSet (szPath);
PathDelete ("scratch", PARTIAL);
endif;
end;
====== 追加方式的卸载问题 ======
问题:当卸载的时候,却发生了一件事情,那就是,原来系统已经有的环境变量Path也被自动删除了,这会影响到其他软件的使用。
解决方案:原来,installsheild会记录所做的操作在log信息中,卸载时,会自动进行清理动作。
那么如何才能避免呢?RegDBSetKeyValueEx函数调用之前,可以先Disable(LOGGING);
调用之后,在Enable(LOGGING); 即可解决这个问题。
====== Dos命令无法使用的问题 ======
* 问题:所有的dos命令,如ping 不能使用了。
* 解决方案:在网上查找,只找到问题,没有搜索到解决方案,于是,只能一一查看Help,发现RegDBSetKeyValueEx的第三个参数引来的问题,需要修改第三个参数为REGDB_STRING_ EXPAND,因为在XP下,path含有一个%SystemRoot%的相对路径,如果使用了REGDB_STRING,所有的dos命令将都不能使用,此时,在dos下输入path一看,该替换成绝对路径的地方都没有替换掉,IS程序里键值设置时候的类型问题,REGDB_STRING是不认识相对路径的,换成REGDB_STRING_ EXPAND就可以了。
- Installshield环境变量的追加与删除
- Installshield环境变量的追加与删除设置
- 环境变量的删除与替换
- addEventListener()与removeEventListener(),追加事件和删除追加事件
- ubuntu环境变量的添加与删除
- InstallShield修改环境变量后不能立即生效的问题
- jQuery元素的追加和删除
- 可变数组的追加,插入,删除,替换
- jquery 如何删除追加的div
- 用InstallShield打包 在用户选择的安装目录后面追加路径的问题
- 批处理追加环境变量
- linux中追加<<环境变量
- InstallShield之残留文件删除与快捷方式自定
- 权限中的【追加】与【追加到】的区分
- jQuery--追加/删除 元素
- 点击追加以及删除
- iOS 数组与数组的追加
- Python文件的创建与追加
- Android应用开发完全退出程序的通用方法!!! (转)
- rtge更好发挥士大夫广告的通过合同
- 【转】JAVA IO相关对象介绍
- ASP.NET导入Excel到数据库(SQL)
- 【转】Java内部类
- Installshield环境变量的追加与删除
- UNIX/Linux:向进程发信号的3种方式
- 查看oracle 10g 数据库中被锁定的行和表的sql
- IAR STM8 编译器
- 1+2+3+...+n不能用while、for、if else等实现
- Criteria操作
- python 读/写文件操作
- linux备忘录
- 七ヶ月になり