使用installshield 獲取註冊表,刪除註冊表

大家在做安裝包的時候常常會遇到更新等問題,在使用installshield製作安裝包,如果軟件版本發生改變,那麼更新是自動完成的。但是我們這裡有一個問題,在installshield如果新版本的regist信息和舊版本的regist信息發生了改變,比如說註冊表結構改變,或是不需要以前的註冊表目錄想要刪除時,那麼在運行新的安裝程序時候,程序必然會報錯。。這樣就是為啥好多軟件安裝新版本的時候他會要求你刪除原先的版本在繼續進行安裝(一開始我的解決方案是將以前註冊的dll通過腳本刪除,但是發現雖然dll的註冊信息刪除了,但是其程序還在添加和刪除安裝程序中,所以此方法不可行)。現在給大家講下怎麼實現判斷以前版本是否安裝,並提示用戶刪除。

在installshield裡面有Product Code這個選項,它的意思就是一個特定是產品編碼,來確定是否是同一個軟件的。下面這個是我們舊版本的截圖。

 

新版本的Product Code如下

 

在更遍了Product Code後,在運行安裝包的同時就不會出現升級的界面了,但是這樣的話會在機器裡面出現一個軟件的兩個版本,對用戶來說這是相當不禮貌的做法啊。

所以我們想如何能判斷用戶是否安裝了以前的版本並提示他刪除,這樣的話我在註冊表信息裡面找啊找終於被我找到了。。

在HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall{你的產品Code},如果用戶安裝了你的軟件並且沒有卸載就會在這裡出現這條註冊信息。。

這樣的話我們現在的問題就是如何在安裝得時候檢測到這條註冊表信息,並提示用戶卸載這個版本。

我們的目的是在安裝之前檢測並提示所以要在function OnFirstUIBefore()中寫入腳本。我找到一個函數

RegDBKeyExist(“\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{你的產品Code}”);

其返回值為-1代表沒有找到這條註冊信息,1為找到這條註冊信息。

使用這個函數前需要使用這個函數來確定進行註冊表操作的根目錄:

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

知道這些後咱們的任務基本完成啦,附上代碼:

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); if(RegDBKeyExist("\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{5E3673E9-3F06-40B7-B852-5A52D43316D9}")>0) then MessageBox("安裝軟件檢測到較早版本,為保證軟件正確安裝請卸載該版本,安裝程序即將結束。",SEVERE); abort; endif;

其實代碼是很簡單的,主要是installshield得腳本語言大家都不熟悉,而且網上資料比較少。

刪除註冊的函數RegDBDeleteKey(string)

給大家我找到的一份installshield的腳本語言函數等的介紹合計,希望對大家以後的工作有所幫助哈!

InstallShield內部庫函數

本篇文章來源于職場幫(www.guan8.net) 原文出處︰http://www.guan8.net/Java/1072851.html

Basic INFO – InstallShield的版本区分

在不同场合,总能遇到朋友分不清楚InstallShield的版本。

首先版本在英文里有Edition和Version两个意思。

InstallShield 的Edition分为Premier,Professional和Express:

主要区别在于功能的差异,Express功能非常有限,一般不推荐,而另外两个版本区别见《InstallShield Premier版本和Professional版本的功能差异

而Version是开发版本号,对应关系如下:

InstallShield 2012 – Ver 18.0

InstallShield 2011 – Ver 17.0

InstallShield 2010 – Ver 16.0

InstallShield 2009 – Ver 15.0

InstallShield 2008 – Ver 14.0

InstallShield 12 – Ver 12.0

InstallShield 11.5 – Ver 11.5

InstallShield 11 – Ver 11.0

InstallShield 10.5 – Ver 10.5

InstallShield X – Ver 10.0

InstallShield DevStudio – Ver 9.0

InstallShield Developer 8 – Ver 8.0

InstallShield Developer 7 – Ver 7.0

InstallShield 6.x – 常见Ver 6.2或6.3

InstallShield 5.1 – Ver 5.1

当前InstallShield的最新版本是InstallShield 2012,新功能见:http://www.cnblogs.com/installshield/archive/2011/08/23/2150979.html

InstallShield Premier版本和Professional版本的功能差异

版权声明: 可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。

对于InstallShield的用户来说,常常分不清楚InstallShield两个版本到底有什么差别,常常遇到一些朋友因为选择了错误的InstallShield版本导致无法实现某些功能,现在越来越觉的有必要再说明一次。
从字面意思理解似乎Professional版本更专业,再加上Premier版本的市场价比Professional版本几乎高出一倍,所以一些公司和个人会毫不犹豫选择Professional版本。之前国内销售商或客户把Premier版本称之为“豪华版”,更近一步加剧大家对InstallShield版本的误解。

InstallShield 6.x,7.0等早期版本就有一个Professional版本,支持多语言有另外两个语言包,一个是东方语言包,一个是西方语言包。再后来去掉了语言包,而将带多语言支持的InstallShield称之为Premier版本。
其实我们选择适合自己的InstallShield版本时,完全要取决于实际项目需求,以下是Premier版本和Professional版本的主要区别:

1.       Premier版本可以支持35种语言(制作支持多国语言的安装包,必须使用Premier版本),而Professional只支持一种(安装时决定语言,在工程内部其他语言不可选)。
2.       免费获得Standalone Build模块的授权数量不同,最新的InstallShield 2011中,Premier版本可以获得5个授权,Professional版本可以获得1个授权。
3.       Premier版本支持InstallShield最佳实践验证套件 (InstallShield Best Practices Validation Suite)。
4.       Premier版本支持制作试用版安装包。
5.       Premier版本带一个InstallShield Repackager包,可以进行Setup.exe到MSI格式的转换。
6.       Premier版本可以获得5个InstallShield Collaboration Module的授权。

基于以上的功能差异,用户选择适合自己的InstallShield版本。

了解InstallShield的朋友可能会说,为什么没有提Express版本,这里简单说明一下,InstallShield Express版本无法进行脚本编程,想对安装包做任何修改,在Express里都无法实现, 所以这里就不做推荐了。