【问题标题】:why does NSIS sets the target to default INSTDIR?为什么 NSIS 将目标设置为默认 INSTDIR?
【发布时间】:2012-01-26 23:35:53
【问题描述】:

我正在尝试为 32 位应用程序创建一个 exe 安装程序,它也会为我的应用程序创建快捷方式。我正在使用 NSIS 构建安装程序,并且成功构建了安装程序。当我在 64 位 Windows 操作系统上运行 .exe 时,它​​会创建必要的文件夹、更新注册表并在桌面上创建快捷方式。但是,当我在创建的桌面上检查快捷方式的属性时,“start-in”参数是正确的。但是,目标参数是错误的。即我使用:

创建快捷方式 "$DESKTOP\shortcut.lnk" "$INSTDIR\bin\app.exe" ""

其中 INSTDIR = 程序文件

起始位置正确设置为:C:\program files(x86).... 我期望目标是相同的。

但是,目标设置为:C:\program files....

我在这里遗漏了什么吗?

【问题讨论】:

  • 你为什么使用一个空的可选参数?
  • 我没有要传递的参数。这会影响设定目标吗?
  • 有几个可选参数,仅将其中一个设置为空是非常随机的,但它不应该影响.lnk
  • 另外,我不太确定,如果对 InstallDir 使用引号会产生任何差异。目前,我正在使用:InstallDir $PROGRAMFILES\app\java
  • 您能否发布一个重现该问题的最小示例脚本,例如pastebin.com/5Ze7SW4L 可能吗?

标签: nsis


【解决方案1】:

MessageBox$INSTDIR 在创建快捷方式之前,确保它是C:\program files(x86)\...

你在调用 DisableX64FSRedirection (x64.nsh) 吗?

起始/工作目录来自对 SetOutPath 的最后一次调用。

我认为 NSIS 将字符串几乎原封不动地传递给 shell,您可以使用 logging build 在传递给 IShellLink::SetPath 之前查看字符串

【讨论】:

  • Messagebox 确实显示了程序文件 (x86) 的路径\...但是在桌面上创建的链接文件上的目标被指向程序文件\....
  • @Ashok 尝试将 $INSTDIR 替换为 C:\program files(x86)\
  • 这很神奇。那么,INSTDIR 没有设置为程序文件(x86)?但是,当我使用 Messagebox 显示时它会显示。那么如何编写通用解决方案呢?
  • 这是否意味着 INSTDIR 没有从 InstallDir 正确读取值?知道如何解决这个问题吗?
  • 您说消息框 $instdir 显示了正确的值。如果你执行 StrCpy $instdir "C:\program files(x86)" 然后创建快捷方式 "$DESKTOP\shortcut.lnk" "$INSTDIR\bin\app.exe" (甚至是 Strcpy $instdir $programfiles)会发生什么?
猜你喜欢
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 2014-03-10
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多