NSIS与InstalldirRegKey玩(NSIS play with InstalldirRe

2019-10-17 10:21发布

从NSIS文件,我们有

root_key subkey key_name这个属性告诉安装程序在注册表中检查字符串,如果该字符串是有效的使用它的安装目录。 如果这个属性存在,它将覆盖INSTALLDIR属性,如果该注册表项是有效的,否则会回落到INSTALLDIR默认。

所以,如果我有一个这些行.nsi文件:

InstallDir "D:\myFolder\myFile"

InstallDirRegKey HKCU "Software\${PRODUCT_COMPANY}\${PRODUCT_NAME}" "Install_Dir"

我明白,我把我的安装目录为D:\myFolder\myFile为默认目录,但如果Software\${PRODUCT_COMPANY}\${PRODUCT_NAME}是一个有效的路径,然后我会用它来代替。 那是对的吗?

从另一个岗位 ,我的理解是InstallDirRegKey指令用于在同一位置覆盖以前的安装。 它是如何工作的更精确? 如果我有以下,

InstallDir "D:\myFolder\myFile"

InstallDirRegKey HKCU "D:\myFolder\myFile" "Install_Dir"

将一个新.exe由NSIS脚本生成的文件覆盖原来的? 还是意味着该可执行文件将覆盖前一个?

Answer 1:

InstallDirRegKey只能从注册表中读取,它永远不会写。

您之前.onInit执行NSIS的作用:

  1. 如果InstallDir设置,该路径被复制到$Instdir
  2. 如果InstallDirRegKey设置和注册表项存在,从注册表路径(删除文件名)复制到$Instdir

所以,如果你想InstallDirRegKey有任何效果的用户运行安装程序,下一次你必须将它指向您的安装在你的部分之一创建密钥。 它可以在你卸载键或类似专用键UninstallString命令HKLKM\Software\My Company\My App

这样做的整点是,当用户重新安装或安装应用程式它将被安装在同一个文件夹中的新版本(覆盖/升级现有的安装)。



文章来源: NSIS play with InstalldirRegKey