请问InnoSetup怎样检测程序已安装,如果安装执行原程序卸载后再进行安装,无安装则直接安装?
解决方案 »
- fastreport 自定义纸张为什么总是先走一张白纸
- 这样的功能用哪个控件啊??
- 一英寸等于多少个像素点?
- 一个关于ActionManager的问题.----菜鸟级
- c/s结构下的多用户并发控制需要程序员自己写代码嘛?还是DBMS自己会处理?或者是需要在DBMS中写存储过程呢?用sql server!
- [讨论用BlockRead读一个位图文件。
- 菜鸟大放分。加密的表如何如何避免运行时弹出密码输入框?
- 如何在内存中创建一个TlistItems,然后定时用此listitems的数据去更新一个listview?
- 是不是一台机器不能同时装两个win2000 server?
- 谁作过档案管理系统?
- FastReport 报表的RichView处理中文的BUG,请各位帮帮忙!
- 一个高难度的问题!哪个高手能解决???
具体就是用InnoSetup读写注册表,加入Delphi脚本实现你定制的functions
在代码中加入下面的部分(下面第三行的'2.0' 就是标识你当前版本的,根据你的情况改一下):
我调试过了,成功![Registry]
Root: HKLM; Subkey: Software\The Application; ValueType: string; ValueName: Installed version; ValueData: '2.0'; Flags: uninsdeletekey[Code]
function GetInstalledVersion(): String;
var
InstalledVersion: String;
begin
InstalledVersion :='';
RegQueryStringValue(HKLM, 'Software\The Application', 'Installed version', InstalledVersion);
Result := InstalledVersion;
end;function InitializeSetup(): Boolean;
var
PrevVer: String;
begin
PrevVer := GetInstalledVersion();
result := true;
if length(PrevVer) > 0 then begin
//如果发现程序已经安装过了
MsgBox ('本程序的 ' + PrevVer + ' 版本已经安装,请卸载后再安装本程序. 安装程序将关闭.', mbError, MB_OK);
result := false;
end;
end;
begin
end;具体的在网上查查
如果你安装过以后下次安装时他自己就能识别出来
如果你要自己读取这个标识,不知道该怎么用