用installshield打包时在注册表里注册项和键值的动态设定方法

解决MSVCP140.dll缺失:vcredist_x86运行时组件安装与版本管理指南 在Windows软件开发与部署中,动态链接库(DLL)是共享代码和资源的核心机制。其原理在于,应用程序在运行时可以调用系统或第三方提供的标准函数库,从而减少冗余代码,提升开发效率和模块化程度。这一技术的核心价值在于确保了软件生态的互操作性和可维护性,使得开发者无需重复实现基础功能。在实际应用场景中,使用Visual C++等编译器开发的软件,普遍依赖于微软提供的对应版本的运行时库(Runtime Library)才能正常执行。当用户系统缺少这些必要的运行时组件时,就会触发诸如“MSVCP140.dll丢失” 阅读详情

在11.5版本里,注册表的函数变化不多

我在这里要记录的是打包的时候注册表的问题,注册表分项和键,打开注册表(开始->运行,输入regedit,确定),可以在左边的树形里看见很多文件夹的图标,这些是项,点击一个项,可以在右边看见他的键值,每个项都有一个“默认”,有的项还有很多键值

在打包的时候,我们有时候要记录很多东西,嗯,我们要记录安装文件的类型(服务器端程序还是客户端程序),我们要记录软件的注册类型(测试版本还是已经注册的软件),我们要记录软件的安装路径(这样我们升级软件的时候,我们的补丁程序可以自己copy到安装路径下),我们想记录的很多东西,我们经常喜欢用注册表,这里我讲两种注册方法

一、要注册的项和键值是静态的

静态的意思是要注册的所有项和键,他们的值在制作安装包的时候就知道的,我们可以直接在is的Registry面板里设置

我假设我要建一个项:HKEY_LOCAL_MACHINE//SOFTWARE//NNLLTEST,在NNLLTEST下有两个string value的键:install(记录安装路径)、soft(记录这个软件是测试版,值是0)

步骤是这个:

1、点击Registry面板,展开Default,可以看见五个根,这五个根是固定的,不变的

2、选中HKEY_LOCAL_MACHINE,右击,选菜单new->Key,新建一个项“New Key #1”,修改名字是“SOFTWARE”

3、选中SOFTWARE,右击,选菜单new->Key,新建一个项“New Key #1”,修改名字是“NNLLTEST”

这样就建好一个项HKEY_LOCAL_MACHINE//SOFTWARE//NNLLTEST了,下面建健值

4、选中NNLLTEST,右击,选菜单new->string value,新建一个键“New Value #1”,修改名字是“install”,这样就建了一个键,双击这个键值,在“value data”文本框里输入:<TARGETDIR>

<TARGETDIR>在is里是代表安装路径的

5、重复第4步,修改名字是“soft”,输入“value data”是:0

这样就建好了如图的注册表

 

安装文件在安装后,也会按这里的设置自动在注册表里生成的,这里生成的注册表项和键值,在卸载时会同时卸载

上面一共是五步,也可以直接在自己的注册表里加上键值后,导出reg文件,Registry面板里使用导入菜单导入,在11.5里,Registry面板里,分了四块,左上角是自己的注册表,也可以直接把自己的注册表,copy到左下角的安装包的注册表里

二、要注册的项和键值是动态的

动态的意思是要注册的项和键,他们的值是不知道的,是在用户安装的时候,由用户的选择和输入的值确定的,这时候我们要用注册表函数在脚本里注册

我不想说注册表函数,我学得不多,想学习下载《InstallShield内部库函数全集中文版》,我这里记录下我学习的时候用到的一些东西

我的一篇帖子
问:请教RegDBGetKeyValueEx 用法:

 

语法:RegDBGetKeyValueEx (szKey, szName, nvType, svValue, nvSize);

说明:RegDBGetKeyValueEx函数检索注册表中一个指定项下一个特定数值名的值。缺省时,InstallShield假定该项是HKEY_CLASSES_ROOT下的一个子项。你可以用RegDBSetDefaultRoot来指定另一个开关键。RegDBGetKeyValueEx是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。

参数:   szKey指定其值要被检索的项的名称。用一个双反斜杠来分隔子项中的不同层。   szName指定在szKey下其值要被检索的数值的数值名。要检索项的缺省值,则传递一个空字符串。   nvType返回下列预定义常量之一,它们标识在svValue返回的数据的类型:请参阅15.12中该部分的说明。   svValue返回由szKey和svName 指定的值。注意一个数值型值以一个字符串返回。   nvSize以字节数返回在svValue返回的值的大小。

返回值:   0:表明函数成功检索该值。   < 0:表明函数未能检索该值。

 

红色那里,“项”是指在注册表里,左边的用文件夹的图片显示的那些吗?那“数据值”是没是指注册表中右边显示的那个“名称、类型、数据”列表里的名称呢?

试了好几种调用都出错了,究竟这几个词,对应的是注册表里的嘛啊?

答:

李木勺 15:09:01
RegDBSetKeyVAlueEx(szKeyRoot,"path",REGDB_STRING,INSTALLDIR,-1);
李木勺 15:15:07
szKey="SOFTWARE//NNLLTEST";这是你创建的项。
你却往这个地方写值:
SOFTWARE//NNLLTEST//cona

这两句话教会了我RegDBSetKeyVAlueEx是怎么用的

1、用InstallationInfo创建的项,用RegDBSetItem创建的键值
InstallationInfo创建的项是一定在HKEY_LOCAL_MACHINE]/Software /Microsoft/Windows/CurrentVersion/App Paths下的,函数是这个

function NnllReg()
number nItem;   
string szCompany,szProduct, szVersion, szProductKey, szValue;
begin    
 //修改注册表
 //在在HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/App Paths/下
 //创建了一个项:NNLL想添加键
 //两个键:默认和Path
 //反安装可卸裁
   szCompany="公司名";
      szProduct="软件名";
      szVersion="1.0";
      szProductKey=" //NNLL想添加键";
      if (InstallationInfo (szCompany, szProduct, szVersion, szProductKey) < 0) then
         MessageBox("添加项出错",SEVERE);
      else
         //添加这个项下的键值
         //默认
         nItem=REGDB_APPPATH_DEFAULT;
         szValue=TARGETDIR + " //default";
         RegDBSetItem (nItem, szValue);
         //Path
         nItem=REGDB_APPPATH;
         szValue=TARGETDIR;
         RegDBSetItem (nItem, szValue);
      endif;
end;

这样注册的注册表,在卸栽的时候是同时卸栽的

2、使用RegDBSetKeyValueEx在指定的路径注册项和键值

我假设我要建一个项:HKEY_LOCAL_MACHINE//SOFTWARE//NNLLTEST,在NNLLTEST下有两个string value的键:cona(记录公司名)、sc(记录这个软件是客户端程序还是服务器端程序)

①获取公司名和用户名的对话框一般是is自动生成的

Dlg_SdRegisterUser:
    szMsg = "";
    szTitle = "";
    //{{IS_SCRIPT_TAG(Dlg_SdRegisterUser) 
    nResult = SdRegisterUser( szTitle, szMsg, szName, szCompany );
    //}}IS_SCRIPT_TAG(Dlg_SdRegisterUser)
    if (nResult = BACK) goto Dlg_SdLicense2;

②在OnFirstUIBefore函数里,加入让用户选择对话框,让用户确定是安装服务器端程序还是客户端程序

//NNLL加入判断,安装的是服务器还是工作站
SelectType:
szMsg="请选择安装的计算机用于:"   ;
bvCheck1 = TRUE;                     
bvCheck2 = FALSE;
bvType = TRUE;
nResult = AskOptions ( EXCLUSIVE , szMsg , "服务器" , bvCheck1 , "工作站" , bvCheck2 );
    if (nResult = BACK) goto Dlg_SdLicense2;
    if bvCheck2 = TRUE then
       //工作站,注册表项server=0
       bvType = FALSE;
    else
       //服务器,注册表项server=1
       bvType = TRUE;
   endif;
//NNLL修改完毕

哦,我忘了说了,szCompany和bvType两个变量要设置成全局变量

③添加注册表函数

function NnllReg()   
number nRootKey,nType,nSize;
string szKey,szNumName,szNumValue,szClass;
begin    
 //修改注册表
 nRootKey = HKEY_LOCAL_MACHINE;
 RegDBSetDefaultRoot (nRootKey); //置根为nRootKey
 //注册子项
 szKey="SOFTWARE//NNLLTEST//";
 if RegDBKeyExist(szKey) < 0 then
    //不存在“SOFTWARE//NNLLTEST”,创建这个项
    RegDBCreateKeyEx(szKey,"");
 endif;
 //初始化每个键的公共值
 nType=REGDB_STRING;
 nSize=-1;
 //注册安装路径
 szNumName="install";
 szNumValue=TARGETDIR;
    RegDBSetKeyValueEx(szKey,szNumName,nType,szNumValue,nSize);
    //设置为未注册版本
    szNumName="soft";
 szNumValue="0";
 if RegDBKeyExist(szKey) < 0 then
    //如果不存在这个项,就注册,如果存在,就跳过
    RegDBSetKeyValueEx(szKey,szNumName,nType,szNumValue,nSize);
    RegDBCreateKeyEx (szKey, szClass);
 endif;
    //注册公司名
 szNumName="cona";
 szNumValue=szCompany;
    RegDBSetKeyValueEx(szKey,szNumName,nType,szNumValue,nSize);
    //注册程序类型
    szNumName="sc";
    if bvType then
    szNumValue="S";
 else
    szNumValue="C";
 endif;
    RegDBSetKeyValueEx(szKey,szNumName,nType,szNumValue,nSize);
end;

④调用这个自定义函数,在安装结束的时候在注册表生成项和键值

prototype NnllReg(); //声明函数
function OnEnd()
begin    
 //修改注册表
 NnllReg();
end;

这样注册的项和键值,在卸载的时候,项和键是保留的,动态的值会被删除,静态的值会保留,重新安装的时候,值会被更新

我最后要说的是RegDBSetKeyValueEx函数,因为在《InstallShield内部库函数全集中文版》里有一句话

szName指定要被设置的数值数的数值名。为设置在szKey指定的项的缺省值,给该参数传递一个空字符串。

我的阅读能力很差,所以我一直设置SzName="",所以我一直注册不到键值,我在注册子项,上面我记录的李木勺的两句话,就是这两句话,我想到这个

如果szNumName="",建的是子项,szKey,默认值是szNumValue

如果szNumName="键的名字",建的是szKey下面的键值,默认值是szNumValue

在is的帮助里,有这样的例子:

// Create a key to test.
    szKey = "TestKey";
    if (RegDBCreateKeyEx (szKey, "") < 0) then
        MessageBox ("RegDBCreateKeyEx failed.", SEVERE);
        abort;
    endif;
    // Set up parameters for call to RegDBSetKeyValueEx.
    szNumName  = "TestValue";
    szNumValue = "12345";
    nType      = REGDB_NUMBER;
    nSize      = -1;
    // Set a key name and a value associated with it.
    if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue, nSize) < 0) then
        MessageBox ("RegDBSetKeyValueEx failed.", SEVERE);
        abort;
    else
        // Display what RegDBSetKeyValueEx has done.
        szMsg = "%s set to: %s";
        SprintfBox (INFORMATION, TITLE, szMsg, szNumName, szNumValue);
    endif;

如果我在上个星期按F1的时候,我看了这个例子,我也会想到要怎么用,我没有看,因为我以为我有《InstallShield内部库函数全集中文版》

最好的帮助是F1

在用installshield制作安装包时如何在注册表中写文件关联 最近在学习用installshield制作安装包,这两天遇到需要写注册表的问题:通过注册表设置文件关联,即将一个带有特殊后缀的文件连接到一个应用程序上。怎么在installshield中进行设置呢? 首先我们先来学习一下注册表,以下内容为转载 认识注册表 一、六大根键的作用 阅读详情

相关推荐

大数据运维面试题及答案

1. 架构组成:- 2 个 NameNode(Active 活跃节点、Standby 备用节点),实时同步元数据(通过 JournalNode 集群,默认 3 个节点,存储 edits 日志,Active 写入、Standby 读取以保持元数据一致);- 容错性强:通过 RDD 的 “ lineage(血缘)” 机制,任务失败时可快速重算,无需从头执行。:集群 “大脑”,管理元数据(文件目录、块位置),实时响应客户端请求,数据存于内存,元数据镜像(fsimage)和编辑日志(edits)持久化到磁盘;

weixin_42795092的博客 905

InstallShield内部库函数之15 注册表函数

InstallShield内部库函数之15  注册表函数下列函数允许你访问注册表,读、创建和删除注册表项,和为卸载建立注册表相关参数。CreateCreateInstallationInfo为你安装的程序创建一个应用程序信息项和一个每应用程序路径项。CreateRegistrySet创建在资源窗格的注册表入口文件夹中指定注册表入口的一组或所有组。DeinstallSetReference指定在卸载

FANGAO的专栏 1771

CS231n+assignment2(一)

cs231n作业二详解+代码

qq_56551150的博客 2409

Installshield脚本中安装时RegDBCreateKeyEx的注意事项

1. 现象: 软件A和软件B在注册表同一个节点下有各自的子节点,比如在 HKEY_LOCAL_MACHINE\Software\MyCompany\COMMON下有SoftwareA和SoftwareB两个子项,各自又分别有自己的键值。 在卸载时发现先安装的软件被卸载后,COMMON这一层的节点也会被删除,导致另一个软件的注册项也被删除。 2.原因 安装脚本中用如下代码添加注册表项:

isilent 2565

高通camera open代码流程(hal到kernel)

内容:简单介绍Camera open代码调用流程,从HAl到kernel。(api1+hal1) 前言 Android camera api和hal对应关系。安卓在版本更新过程中,camera相关代码也经历了几个版本的更新,表现为camera HAL版本更新(HAL1->HAL2->HAL3),camera API版本更新(camera API1->camera API2),接下...

oxoo123的专栏 4275

别再被无限debugger卡住了!Chrome DevTools实战绕过技巧(含Hook与文件替换)

本文详细介绍了如何通过Chrome DevTools绕过无限debugger封锁的实战技巧,包括Hook技术与文件替换方法。针对常见的定时器轰炸、循环陷阱和动态注入等反调试手段,提供了高效的解决方案,帮助开发者快速突破调试障碍,提升爬虫和逆向工程效率。

weixin_30326515的博客 239

InstallShield的注册表操作

帮朋友做一个安装盘,需要往注册表里面写东东,使用了一下InstallShield的注册表操作,感觉还是满强大的 首先,我要设置一下操作的注册表项都在哪个目录下,比如都在HKEY_LOCAL_MACHINE下,那我就调用下面这句话,注意,这句话一定要在所有读写注册表项之前进行,并且只调用一次即可:RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE)...

weixin_34137799的博客 858

【数据结构】面试题整理 共36题

链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。与数组不同,链表中的元素在内存中不必是连续存储的,这使得链表在插入和删除操作时非常高效。单向链表(Singly Linked List):每个节点只包含一个指向下一个节点的指针。双向链表(Doubly Linked List):每个节点包含两个指针,一个指向下一个节点,一个指向前一个节点。循环链表(Circular Linked List):链表的最后一个节点指向第一个节点,形成一个环。

weixin_44329069的博客 7192

VisionPro8.2安装报错RegDBSetKeyValueEx failed的解决方法

最近重装VP,于是打开8.2的安装包, 直接点击安装包,往下安装去了 还挺顺畅的,几乎一路,下一步。到最后就报错了 百度看了看,没找到合适方案。后面回头看看安装包,发觉还有一个应用程序包。好奇之下,就打开看了看,里面是安装,软件应用环境的,相当于应用配置这样子吧 点它,安装。 等装完这个配置环境,你就发觉VP安装程序,自动跳出来了。 然后VP安装,继续日常操作,就可以成功安装了。 ...

Img_ZENG的博客 2092

使用3dmax Morpher制作Unity表情动画

关于游戏人物的面部表情动画 方案一:如果面部骨骼数丰富的话,可以直接做骨骼动画 方案二:采用变形器(3dmax是Morpher,maya是blendshape)修改相应通道的权重值来做表情动画 本文简述方案二的做法。 说明:本文截图中3dsMax版本为2017。笔者第一次使用3dsMax,欢迎指正。 3dmax中导入人物模型,选择需要变形的对象,即head。当前对象附带skin信息。 ...

写作帮助思考 2万+

【100%通过率】华为OD机试真题 Python 实现【高矮个子排队】【2023 Q2 | 100分】

我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高或者相等;要求小朋友们移动的距离和最小,第一个从“高”位开始排,输出最小移动距离即可。移动距离的定义如下所示:第二位小朋友移到第三位小朋友后面,移动距离为1,若移动到第四位小朋友后面,移动距离为2。现在有一队小朋友,他们高矮不同,,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。1:其实题目理解之后就知道,目标是要保证最小移动距离,且以高位为起点。2:try catch 异常处理。

MISAYAONE的博客 3144

程序打包 安装包制作

VS2013程序打包部署 C#程序以管理员权限运行 一个完整的Installshield安装程序实例 WINDOWS7下.NET程序运行出现"发布者未知" 【教程】InstallShield使用完全教程 用installshield打包时在注册表里注册项和键值的动态设定方法 使用注册表将程序设置为开机自启动 ...

Slogic的博客 269

【智能车Code review】—曲率计算、最小二乘法拟合

【1】曲率计算函数 选三个点计算曲率 float process_curvity(byte x1, byte y1, byte x2, byte y2, byte x3, byte y3) { float K; int S_of_ABC = ((x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)) / 2; //面积的符号表示方向 byte q1 = (byte)((x2 - x1) * (x2 - x1) + (y2 - y1) *

hanhan的博客 1万+

【海洋女神原创】一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(四) --高级设置二...

上一篇:一个完整的安装程序实例—艾泽拉斯之海洋女神出品(三) --高级设置一 4. 根据用户选择的组件,从外部文件夹拷贝相应的文件到安装目标路径的文件夹中 这个用途常见于配置文件和授权文件的应用,同一程序,授权给不同的用户,只需要不同的配置和授权文件。如果将配置和授权文件每次都打包在安装程序里,那么变更一个用户就需要重新打包一次,这是一个浪费时间和精力的行为。如果将授权和配置文件(当然内容是加密...

weixin_34166847的博客 357

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

usb 驱动安装过程中对注册表的改动

假设硬件ID为 USB/VID_aaaa&PID_bbbb/PRODUCTNAME系统会在注册表HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Enum 下为每个字段生成一个目录,比如ID中的第一个字段为USB,那么Enum下会生成USB子目录,第二个字段为VID_aaaa&PID_bbbb,则在USB目录下生成VID_aaaa&PID_bbbb子目录,最后一个字段为PRODUCTNAME,则在VID_aaaa&PID_bbbb目录下生成PRODUCTNA

zhongguang1019的专栏 7357

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Advanced Installer,搜索注册表,根据注册表选择安装路径

又停了一段时间没有更新了,今天上博客,发现有位朋友就打包的时候需要搜索注册表(不同版本注册表路径不一致,需要搜索多次来确定安装的是哪个版本,然后再来读取之前的安装路径为现在的路径)来实现安装路径自动选择的问题,这里就这个问题来更新一篇关于搜索注册表和设置安装路径的办法,话不多说,开整。1、确定安装路径所存的变量名称及更改的地方 老鸟可以无视这个步骤,对于新手可以看一下,这里先说结果,安装路径是存在

工作随笔 9920

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

注册表-部分详解

什么是注册表  在windows的开始/运行菜单中输入"regedit"你就可以通过注册表编辑器看到注册表,注册表是什么呢?简单地说,它是用来对windows操作系统进行配置的一个工具.通过它,可以对操作系统及应用软件进行优化,可以自己设置windows的使用权限,可以解决硬件及网络设置不当带来的故障甚至可以改造自己的操作系统. 在windows 3.X时代,主要通过WIN.INI及SYSTE...

橙-极纪元-JJYCheng 5296

HOWTO:InstallShield如何往注册表中写二进制数据(REGDB_BINARY)

版权声明: 可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。下面是一个简单的示例代码,实现将二进制数据写入注册表:  function OnBegin() NUMBER nRootKey, nType, nSize; STRING szKey,szNumName, svHex[8]; begin nRootKey = HKEY_LOCAL_...

weixin_34150503的博客 216

【教程】InstallShield使用完全教程

InstallShield    Installshield是一个强大和易于使用,用于解决Windows软件安装包开发的制作工具。用它可以以传统MSI方式和虚拟格式,自动化地封装、捆绑和包装你的产品。    IntallShield能使你的用户在决定何时何地何方式管理和部署你的应用程序时,得到一个最时尚舒畅的安装体验。是Microsoft Windows平台上应用程序安装打包领域,使用最广泛...

weixin_33736649的博客 3929

installshield修改注册表

1.修改注册表 prototype int changreg(); function int changreg()      number nRootKey,nType,nSize;     string szKey,szNumName;     STRING szNumValue;     int res; begin        //启用IE的对未可信的ActiveX

xiaoxiaoyu85的专栏 3343

InstallShield X制作安装程序杂记(5.System Configuration节点)

1.Shortcuts(快捷方式):快捷方式主要是以下几个地方:Start Menu(开始菜单)/Programs Menu(程序菜单)/Startup(启动)/Desktop(桌面)    (1)Start Menu,如果你装了UtraEdit就知道了,点击开始菜单,在上方就可以看到,这是比较cool的一种方式,堪称最快捷。而且很多软件都不往那里装,比较显眼,好找。    (2)Programs

fbysss的专栏 2094
上一篇: C#Socket编程
下一篇: installshield 12较6.0生成MS SQL数据库策略
JavaProgramers
博客等级 码龄22年 660粉丝 304原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值