2013-01-04 51 views
3

我正在使用NSIS爲我在Visual C++ 2012 Express中執行的項目創建可執行文件。因爲我是初學者,所以我開始使用HM NIS Edit中的安裝嚮導。檢查NSIS中的註冊表

我試圖將Visual C++ 2012 Redistributable與我的程序捆綁在一起,但是每次安裝程序重新運行時,Redistributable都會彈出「修復」&「刪除」選項,而且看起來很煩人。

所以我決定寫NSIS腳本的一點點,這是劇本開始至今:

Var STR 
Section CheckForReg 

ClearErrors 
ReadRegDWORD $0 HKLM "SOFTWARE\Classes\Installer\Dependencies\{8e70e4e1-06d7-470b-9f74-a51bef21088e}" "Version" 

ifErrors 0 Blank 
StrCpy $STR "$INSTDIR\vcredist_x86.exe" 
GoTo End 

Blank: 
    StrCpy $STR "" 
End: 

SectionEnd 

這片被稱爲在腳本的一開始,和全局變量STR適用於:

!define MUI_FINISHPAGE_RUN $STR 

不久後。

顯然這是一個非常愚蠢的做法,但我不需要太多。

問題是CheckForReg始終認爲註冊表不存在,並且不會移動到標籤Blank。作爲一個說明,我手動檢查註冊表,每次和註冊表項的樣子:

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\{8e70e4e1-06d7-470b-9f74-a51bef21088e}] 
"Version"="11.0.51106.1" 
"DisplayName"="Microsoft Visual C++ 2012 Redistributable (x86) - 11.0.51106" 

因此問題是:我在哪裏這個問題呢?它看起來很簡單,但顯然我有一些倒退。

- 刪除的代碼轉儲

回答

5

您只能使用ReadRegDWORD讀取DWORD!

!include LogicLib.nsh ; So we don't have to use all these labels 
StrCpy $STR "" 
ReadRegStr $0 HKLM "SOFTWARE\Classes\Installer\Dependencies\{8e70e4e1-06d7-470b-9f74-a51bef21088e}" "Version" 
${If} $0 == "" 
    StrCpy $STR "$INSTDIR\vcredist_x86.exe" 
${EndIf} 
+0

哈哈哈男人不我覺得自己像個白癡:P 尼斯答案很簡單,因爲它應該是。 – Izman