innosetup如何往注册表写入多条

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了innosetup如何往注册表写入多条相关的知识,希望对你有一定的参考价值。

有些程序需要随系统启动,或者需要建立某些文件关联等问题,这些都是通过在安装程序中对注册表进行操作的结果。Inno Setup中通过[registry]段实现对注册表的操作。

本段说明:

参数列表:

参数

说明

Root

根键。必须是下列中的一个:

HKCR (HKEY_CLASSES_ROOT)

HKCU (HKEY_CURRENT_USER)

HKLM (HKEY_LOCAL_MACHINE)

HKU (HKEY_USERS)

HKCC (HKEY_CURRENT_CONFIG)

Subkey

子键名,可以包含常量

ValueType

值类型,必须是下列中的一个:

none

string

expandsz

multisz

dword

binary

如果指定了none (默认设置),安装程序将创建一个没有键值的键,在这种情况下,ValueName 和ValueData 参数将被忽略。

ValueName

要创建的值名,可以包含常量,如果是空白的,将写入到“默认”值

ValueData

值的数据

Permissions

指定登录注册表键ACL (访问控制列表) 的附加权限,该参数只在Windows 2000 或更高版本中有效,可用的参数是full、modify和read

Flags

是额外选项设置。多个选项可以使用空格隔开。支持下面的选项:

createvalueifdoesntexist

deletekey

deletevalue

dontcreatekey

noerror

preservestringtype

uninsclearvalue

uninsdeletekey

uninsdeletekeyifempty

uninsdeletevalue

下面的例子将会使得安装程序在操作系统启动后自动运行。

[setup]

;全局设置,本段必须

AppName=Test

AppVerName=TEST

DefaultDirName="E:TEST"

AppVersion=1.0

Compression=lzma2/max

ShowLanguageDialog=yes

[components]

Name: main; Description:"主程序(必选)";Types:full compact custom;Flags: fixed

Name: data; Description:"数据文件";Types:full

Name: help;Description:"帮助文件";Types:full compact

[files]

Source: "F:desktop estipmsg.exe"; DestDir: "app";Components:main

Source: "F:desktop estin.dat"; DestDir: "app";Components:data

Source: "F:desktop esthelp.chm"; DestDir: "app" ;Components:help

Source: "F:desktop est eadme.txt"; DestDir: "app";components:help;Flags:isreadme

[registry]

;本段处理程序在注册表中的键值

Root:HKLM;Subkey:SOFTWAREMicrosoftWindowsCurrentVersionRun;ValueType: string; ValueName:TEST;ValueData:appipmsg.exe;Flags: uninsdeletevalue

一路Next到底,安装完成后可以检查注册表:

Inno Setup入门(十)——操作注册表 - Castor - 趁年轻,多折腾~~
确实添加到注册表中去了,通过金山卫士也证实了这一点:

Inno Setup入门(十)——操作注册表 - Castor - 趁年轻,多折腾~~
由于使用的标志位是uninsdeletevalue,所以卸载软件将会自动删除该值,如果使用uninsdeletekey的话,该键下的其他值都会被删除,这不是一个很好的方法,除非你确定使用的是自己的专用键,否则不推荐使用。
参考技术A innosetup如何往注册表写入多条使用inno setup 操作注册表无非就是写入、查询、删除

//查询path,放入变量oldPath中
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'path', oldPath);

//写入字符xxx到环境变量path中,当然,xxx既可以是单纯的字符串,也可以是字符串变量
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'path', ‘xxx’);
//删除环境变量path
RegDeleteValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment','path');

用Java连接Oracle ,可以用Java往Oracle写入数据,但是用sql往Oracle插入数据时,关闭了再打开,数据消失

但用Java插入的数据就不会消失,是什么问题呢? (没有财富了)
我的代码是这样的,麻烦各位大神帮忙看一下
try
conn=DriverManager.getConnection(dburl,dbuser,password);
sql=conn.createStatement();
sql.executeUpdate("INSERT INTO teacher values('2009307','张小小','男','ABCD','623371','dfds')");
conn.close();
sql.close();
catch(SQLException e)System.out.print(e);

可以使用 %rowcount 返回受影响的行数
SQL%rowcount --用户成功提取数据的行数
示例:向表中插入一行数据,询问是否插入成功.
declare
iCount int:=0;
begin
insert into place values(2,'beijing');
DBMS_output.put_line('游标所影响的行数:'||SQL%rowcount);
if SQL%NotFount then
DBMS_output.put_line('NotFount为真);
else
DBMS_output.put_line('NofFount为假');
end if;

if SQL%Fount then
DBMS_output.put_line('Fount为真);
else
DBMS_output.put_line('Fount为假');
end if;
if SQL%isopen then
DBMS_output.put_line('isOpen为真);
else
DBMS_output.put_line('isOpen为假');
end if;

isCount:=SQL%rowcount;
DBMS_output.put_line('影响了'||isCount||'行');
end;
参考技术A 你connection的setautocommit是不是设了false

执行完语句之后加上con.commit();

或者sql语句改改

begin

sqlStr ......

commit ;

end ;
参考技术B 估计是你语句最后没有加入commit; 没有提交的缘故吧 参考技术C 就是没用自动提交,也没有手动提交
conn.commit();
sql.close();
conn.close();
改成这样就可以,另,建议先管Statement再关Connection,否则关Statement时候可能会报错
参考技术D 通过编程语言去连接数据库(以java为例),接口有jdbc或hibernate,会自动提交
如果是用jdbc,在weblogic或was中会有缓存池的存在。
而使用hibernate框架,其也自带2级缓存机制。
而sql在使用pl/sql或toad去执行sql后,更新的数据只是会在redo里有记录,正不会真实提交到undo中,只有commit之后提交才可
第5个回答  2010-08-28 用sql往Oracle插入数据时,默认不是提交的,你需要手动提交。
比如执行sql后你需要输入 commit 进行提交
再提一点,你这段代码也太水了
try
conn=DriverManager.getConnection(dburl,dbuser,password);
sql=conn.createStatement();
sql.executeUpdate("INSERT INTO teacher values('2009307','张小小','男','ABCD','623371','dfds')");
conn.close();
sql.close();
catch(SQLException e)System.out.print(e);
1、将关闭语句放到finally里面去
2、关闭顺序应该是先关闭 statement,在关闭conn,先打开的后关,后打开的先关,就跟关门一样。

以上是关于innosetup如何往注册表写入多条的主要内容,如果未能解决你的问题,请参考以下文章

在安装更新之前关闭程序的运行版本(Inno Setup)

如何使用 Innosetup 创建不应使用添加/删除程序注册应用程序的安装程序?

inno setup打包的安装文件更换位置后图标改变了

Inno Setup:如何查看变量值或写入调试输出?

InnoSetup 使用

数据库中数据写入多维数组,如何实现?