1

私は NSIS を初めて使用しますが、新しいバージョンをインストールする際に、既存のインストール済みの古いバージョンをチェックしたいと考えています。ここで見つけたのとまったく同じように作成しました - http://nsis.sourceforge.net/Auto-uninstall_old_before_installing_newしかし、アンインストールを正しく行うために古いバージョンがインストールされていることを確認する必要があるため、インストールの進行状況に InstallLocation レジストリ値を追加しました。

ExecWait '$R0 _?=$INSTDIR' を使用し、古いバージョンのインストール フォルダが INSTDIR と同じである場合、すべてが完全に機能します。しかし、ExecWait '$R0 _?=$R1' を使用すると、NSIS インストーラー エラーが発生しますが、どこに問題があるのか​​ わかりません。何が間違っているのでしょうか?

誰か助けてくれませんか?ありがとう


レジストリは次のように追加されます。


  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${AppName}" "InstallLocation" '"$INSTDIR"'

関数のコード:


ReadRegStr $R0 HKLM \
 "Software\Microsoft\Windows\CurrentVersion\Uninstall\${AppName}" \
 "UninstallString"

  StrCmp $R0 "" done

MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \
    "${AppName} is already installed. $\n$\nClick OK to remove the \
    previous version or Cancel to cancel the installation." \
IDOK uninst
Abort

;Run the uninstaller
uninst:
   ReadRegStr $R1 HKLM \
   "Software\Microsoft\Windows\CurrentVersion\Uninstall\${AppName}" \
   "InstallLocation"

    ClearErrors
    HideWindow
    ClearErrors
    ExecWait '$R0 _?=$R1'
    BringToFront

done:
functionEnd
4

1 に答える 1