由于是新手,
请问在Inno Setup制作安装包时怎样让注册表键随用户安装时选择的路径而改变,
比如迅雷安装后注册表里面有一个键为
Root: HKCU; Subkey: "Software/Microsoft/Internet Explorer/MenuExt/&使用迅雷下载"; ValueType: string; : "d:/Program Files/TValueName: ""; ValueDatahunder Network/Thunder/Program/Geturl.htm"
要是用户安装时选择在C盘呢,应该怎样改变,上面的注册表怎样随着自动改变呢?请高手指教
我的问题其实就是: 在Inno Setup制作安装包时,怎样让注册表键随用户安装时选择的路径而改变。怎样写脚本就能达到目的了? 比如,我玩的《波斯王子3》安装在我的机器的D:/波斯王子3 下边,这时注册表里有个键值对应的路径为 D:/波斯王子3。如果我要把《波斯王子3》安装到我机器的 E,F盘时,注册表对应的路径怎么修改啊。我想自己用IOON SETUP给这个游戏做个安装包,脚本写到注册表这里时实在不会写了。 跪求一个写INNOSETUP脚本的高手帮我解决下,万分感谢。
FLOAT WINAPI BUBIANJUDIB(HDIB hDIB) { WaitCursorBegin(); LPBITMAPINFO lpSrcDIB = (LPBITMAPINFO)GlobalLock(hDIB); if (! lpSrcDIB) { WaitCursorBegin(); return FALSE; } LPSTR lpPtr; LONG lHeight = DIBHeight(lpSrcDIB); LONG lWidth = DIBWidth(lpSrcDIB); DWORD dwBufferSize = GlobalSize(lpSrcDIB); int nLineBytes = BytesPerLine(lpSrcDIB); lpPtr=(char *)lpSrcDIB+dwBufferSize-nLineBytes; FLOAT w[7],t[9],Hu[7]; w[0]=ImageYeTa(lpPtr,1,1,lHeight,lWidth,nLineBytes); w[4]=ImageYeTa(lpPtr,1,2,lHeight,lWidth,nLineBytes); w[5]=ImageYeTa(lpPtr,0,3,lHeight,lWidth,nLineBytes); w[6]=ImageYeTa(lpPtr,2,1,lHeight,lWidth,nLineBytes); t[0]=w[0]; t[1]=w[1]+w[2]; t[6]=w[5]-w[6]; t[8]=pow(t[5],2)-3*pow(t[3],2); Hu[0]=t[1]; Hu[6]=-1*t[3]*t[6]*t[7]+t[4]*t[5]*t[8]; FLOAT tezheng[9]; int i; for (i=0;i<7;i++) { tezheng[i]=Hu[i]; } tezheng[7]=7; tezheng[8]=0; GlobalUnlock(hDIB); WaitCursorEnd(); return tezheng[9]; }
; 脚本用 Inno Setup 脚本向导生成。
; 查阅文档获取创建 INNO SETUP 脚本文件详细资料![Setup]
AppName=GBInvoice
AppVerName=GBInvoice 1.0
AppPublisher=金诚
DefaultDirName={pf}/GBInvoice
DefaultGroupName=GBInvoice
LicenseFile=E:/workspace/j金诚/豫鹤/note/许可证.txt
InfoBeforeFile=E:/workspace/j金诚/豫鹤/note/欢迎.txt
InfoAfterFile=E:/workspace/j金诚/豫鹤/note/谢谢.txt
Compression=lzma
SolidCompression=yes[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked[Files]
Source: "E:/workspace/j金诚/豫鹤/GBInvoice.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:/workspace/j金诚/豫鹤/bin/*"; DestDir: "{app}/bin"; Flags: ignoreversion recursesubdirs
Source: "E:/workspace/j金诚/豫鹤/database/*"; DestDir: "{app}/database"; Flags: ignoreversion recursesubdirs
Source: "D:/Program Files/Borland/Common Files/Borland Shared/BDE/*.dll"; DestDir: "{cf}/Borland Shared/BDE";
Source: "D:/Program Files/Borland/Common Files/Borland Shared/BDE/*.btl"; DestDir: "{cf}/Borland Shared/BDE";
; 注意: 不要在任何共享系统文件中使用“Flags: ignoreversion”[Icons]
Name: "{group}/GBInvoice"; Filename: "{app}/GBInvoice.exe"
Name: "{group}/{cm:UninstallProgram,GBInvoice}"; Filename: "{uninstallexe}"
Name: "{userdesktop}/GBInvoice"; Filename: "{app}/GBInvoice.exe"; Tasks: desktopicon[Run]
Filename: "{app}/GBInvoice.exe"; Description: "{cm:LaunchProgram,GBInvoice}"; Flags: nowait postinstall skipifsilent[Registry]
Root: HKLM; Subkey: "Software/Borland"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software/Borland/BLW32"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software/Borland/BLW32"; ValueType: string; ValueName: "BLAPIPATH"; ValueData: "{cf}/Borland Shared/BDE"
Root: HKLM; Subkey: "Software/Borland/BLW32"; ValueType: string; ValueName: "LOCALE_LIB0"; ValueData: "fareast.btl"
Root: HKLM; Subkey: "Software/Borland/BLW32"; ValueType: string; ValueName: "LOCALE_LIB1"; ValueData: "usa.btl"
Root: HKLM; Subkey: "Software/Borland"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software/Borland/Database Engine"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software/Borland/Database Engine"; ValueType: string; ValueName: "DLLPATH"; ValueData: "{cf}/Borland Shared/BDE"
. REG ADD
用该命令加入一个新的指定键值,从给出的例子文件来看,基本的使用方法如下:
命令-计算机名称-根键名-[子键名称-类型-数据]下面是更详细、规范的表述:
REG ADD [//Machine/]Keyname [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]
参数及说明:
Machine :
计算机名称,此处关于计算机名称的介绍,其它命令也将使用,请注意.以Machine指定远程计算机名称,如果省略,默认值是使用当前的本地计算机,不能使用驱动器名来指定远程计算机名.计算机名称前面的双反斜杠符号不能省去.如://MYDIAC 就是一个正确的范例.
Keyname :键名,此处关于键名的解释,其它命令也将使用,请注意.
格式:[Rootkey/]Key
Rootkey 是根键
根键可以使用以下形式的简写:
根键名
简写形式
HKEY_LOCAL_MACHINE
HKLM
HKEY_CURRENT_USER
HKCU
HKEY_CLASSES_ROOT
HKCR
HKEY_CURRENT_CONFIGURATION
HKCC
注意: HKLM 和 HKCU 键值仅适用与远程计算机。
Key :子键
所选根键之下的子键的完整名字
/v Valuename
向指定注册表加入新键值的名称,如果包含有空格,则字符串应使用引号
/ve
加入的空键值名
/t type
指定使用的数字或字符串的类型,这些类型与win9x相同,这里不再详细介绍.
/s Separator
指定注册表使用的数据字符串的分隔字符,例如使用REG_MULTI_SZ类型时.默认情况下就 "/o" 作为分隔字符。
/f
允许覆盖现存的注册表
/d Data
向注册表中的指定键以指定数据赋于键值
2. REG COMPARE
将当前(本地计算机)的注册表与另外一个注册表或另外一个远程计算机上的注册表进行比较.将比较结果输出到一个文件上.
REG COMPARE [//Machine/]Keyname1 [//Machine/]Keyname2 [/v ValueName] | /ve] [/s] [Output]
参数及说明:
Machine :
指定的计算机名称.含义与上面一样
Keyname1, Keyname2:
注册表的键名,含义及格式与上面一样
/V Valuename:
进行比较的键值的名称,如果包含有空格,则字符串应使用引号
/VE, /ve
比较默认(无键名的)键值
/S, /s :
比较所有子键
Output 输出
以下列形式的开关参数控制输出结果:
/OA,/oa:输出全部的不同部分与相同部分
/OD,/od:仅输出不同部分; /OS,/os:仅输出相同部分
/ON,/on没有任何输出
返回代码的含义:
0:成功地进行了比较,比较的结果是二者相同
1:比较过程失败; 2-成功地进行了比较,比较的结果是二者不相同
3.REG COPY
将当前的注册表或远程计算机上的注册表拷贝到一个新的位置(或计算机上)。
REG COPY [//Machine/]SourceKey [//Machine/]DestinationKey [/s] [/f]
参数及说明:
Machine :
指定的计算机名称.含义与上面一样
SourceKey 和 DestinationKey:
"源"键和"目的"键:注册表的键名称,含义及格式与上面一样
/s :
拷贝全部子键及键值
/f
强制拷贝
举例:
甲例子:REG COPY HKLM/Software/MyCo/MyApp HKLM/Software/MyCo/SaveMyApp
这里MyApp和 SaveMyApp 是不同注册表中的子键名,都在键名为 MyCo的键之下.执行结果是将MyApp拷贝向 SaveMyApp中。
乙例子: REG COPY //SAFARI/HKLM/Software/MyCo //ZODIAC/HKLM/Software/MyCo
这里的ZODIAC和SAFARI是计算机名,MyCo 是两台机器的注册表中都有的键名,执行结果是SAFARI机器的键值被拷向ZODIAC.它与上面一个的主要区别是:1.两台机器都是远程计算机.2.所拷贝的是该键之下的全部内容而不是某一项.
丙例子: REG COPY //ZODIAC/HKLM/Software/MyCo HKLM/Software/MyCo1
作用与上面类似,但ZODIAC是远程计算机,而HKLM是本地当前所用计算机.
4.REG DELETE
删除一个注册表、注册表键值或子键值.
REG DELETE [//Machine/]Keyname [/v ValueName | /ve | /va] [/f]
参数及说明:
Machine :指定的计算机名称.含义与上面一样
Keyname :注册表的键名称,含义及格式与上面相同
/v Valuename :
指定删除的键值的名称,如果包含有空格,则字符串应使用引号
/va :删除该键之下的所有键值
/ve : 删除无键名的值
/f : 强制删除
5.REG EXPORT
将注册表导出到一个文件上.仅适用于在本地计算机导出。
REG EXPORT Keyname Filename [/nt4]
参数及说明:
Keyname :注册表的键名称,含义及格式与上面相同
FileName :导出的注册表文件名
/nt4 以windowsNT4.0的注册表格式导出
6.REG IMPORT
将(备份的)一个注册表文件导入到计算机中.仅适用于在本地计算机。
REG IMPORT FileName
参数及说明:
FileName :准备导入的注册表文件名
7.REG LOAD
从备份的注册表中临时装入一个指定的键值,这种操作类似于使用注册表编辑器导入某一个键值。
REG LOAD [//Machine/] KeyName FileName
参数及说明:
Machine 计算机名,参数含义与上面相同。
Keyname:临时装入的键名称,但含义及格式与上面相同
Key:指定的键名,这个键名是指定文件中所选择的根键或其以下的键值的集合,这个临时装入的键或其集合将在下次启动时删除,也可以用REG UNLOAD命令删除。
FileName :指定的文件名。
8.REG QUERY
显示相关项目的信息,此处所指项目可以是整个注册表之中的根键、子键或其键集合。
REG QUERY [//Machine/]KeyName [/v ValueName | /ve] [/s]
参数及说明:
Machine 计算机名称,含义与上面相同
Keyname 键名 含义及格式与上面相同
Key 所选择根键之下的子键名
/v Valuename :指定的希望显示键值的名称,如果包含有空格,则字符串应使用引号
/ve :显示无键名的值.
/s 显示指定键名之下所有子键
9.REG RESTORE 恢复注册表
REG RESTORE [//Machine/]KeyName FileName
参数及说明:
Machine 计算机名称,含义与上面相同
Keyname 键名,含义及格式与上面相同
FileName :
文件名,这个文件必须是用REG SAVE命令所建立的
10.REG SAVE
保存注册表,这个操作是类似注册表编辑器中的将整个注册表导出到一个文件中,当然,也可以导出某个键或其下面的子键的集合.
REG SAVE [//Machine/]KeyName FileName
Machine: 计算机名称,含义与上面相同
Keyname 键名,含义及格式与上面相同
FileName :
指定的导出文件名,如果不指定路径,则文件就默认保存在当前计算机的当前目录下;如果是远程计算机,不指定路径时,导出文件保存在%SystemRoot%/system32 文件夹.
注意:不能保存HKLM/Security 子键.因它是受系统保护的.
11.REG UNLOAD
移去装入的部分,移去原来用RED LOAD命令装入的部分键或其以下的子键集合.
REG UNLOAD [//Machine/]KeyName
参数及说明:
Machine 计算机名称,含义与上面相同
Keyname 键名,含义与上面相同