2008年12月19日 星期五

[Inno Setup]檢查程式是否已安裝,並且詢問user是否要安裝舊版程式

我有一個用COM寫的dll,因為會給很多支程式一起發佈,這種清況下有可能使用者剛好安裝到舊版本的dll,雖然這樣不是什麼大問題,但是我還是希望使用者盡量使用最新的dll(不安裝舊版程式),因此我在Inno Setup加入一小段pascal code去解決這個問題。


[Setup]
; your setup setting

[Code]
function InitializeSetup(): Boolean;
var version: String;
begin
result := true;
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\yourapp', 'DisplayVersion', version) = true then begin
if CompareStr(version, '1.1.5.0') > 0 then ; 1.1.5.0是你最新版的version
if WizardSilent() = false then begin ; Silent就預設不安裝舊的
if MsgBox('Would you like to install the older version?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDNO then begin ;詢問user
result := false;
end;
end else begin
result := false;
end;
end;
end;


Note:
1. 原本是以為Inno Setup有這個選項可以設定,不過找了一下還是沒找到,所以就自己手動弄了.. XD

2 則留言:

Eden 提到...

原來可以這樣處理呀!
只是我想安裝Visual C++ 2005的版本,那每一台的登錄檔都會是相同的位置嗎?

我想,像MYSQL或FIREBIRD資料庫的安裝,應該也可以如法泡製吧?

高橋旺 提到...

如果是用登錄檔的方式,通常每一台的位置會是一樣的,除非軟體版本或是產品ID有變。

所以只要安裝程式會寫一個"唯一"Key到登錄檔,就可以使用這種檢查方式。

:)

LinkWithin

Related Posts with Thumbnails