如何让我的安装程序检查无效的文件夹安装?

时间:2013-01-10 13:26:28

标签: nsis

。实际上我已在同一台计算机上安装了不同版本的软件,因此当用户进行第三版安装时,要检查该版本的文件夹。我正在尝试使用循环,但安装程序无法正常工作。谢谢。

我已经在同一台计算机上安装了2个版本的相同软件。我希望当我安装第三个版本时,脚本应检查路径,并且不应允许用户安装在前两个版本所在的相同路径中已安装

Function .onVerifyInstDir




  nsArray::Set array 1.6
  nsArray::Set array 1.7
  nsArray::Set array 1.8



  nsArray::Length array
  Pop $R0
  ;DetailPrint `array length: $R0`

  StrCpy $R1 0
  ${DoWhile} $R1 < $R0
    nsArray::Get array $R1
    Pop $R2
    StrCpy $tempregistry "$(^Name)_$R2"

    ;DetailPrint `MyArray2[$R1] is $R2`



 ReadRegStr $path  HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal\$tempregistry""InstallLocation"  ;fetching installed location

   ${If} $path == ""


   ${Else}
   strCmp $path $INSTDIR 0 pathGood
   ;Abort
    IntOp $R1 $R1 + 1
   ${EndIf}  
  ${Loop}


    PathGood:
  FunctionEnd

1 个答案:

答案 0 :(得分:0)

以下是步骤

  1. 将您的产品名称或您的注册表项存储在变量中。
  2. 将要安装的路径存储在变量中,例如$ path
  3. 在循环内部检查注册表项。

    ReadRegStr $ pdt HKLM&#34; SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ productname

  4. 如果找到,请检索已安装位置的值并将其存储在变量中; 例如$ path1 ReadRegStr $ path1 $ pdt&#34;安装位置&#34; 否则继续

  5. $ {if} $ path == $ path1 messagebox mb_ok&#34;路径中已安装的另一个版本&#34;

  6. $ {else}个 继续
  7. $ {ENDIF}