在 NSIS 中,如何使用用户变量重命名或复制文件?

In NSIS, how can I rename or copy a file with a user variable?

我设法创建了一个基本安装程序,但我不喜欢 exe 名称中的版本号。

我想将文件重命名为更通用的文件,例如 myapp.exe 而不是“myapp_v1.2.3.exe”

看了文档,对user变量的用法不是很清楚。我总是收到一个错误,告诉我 $var 名称不存在。

Section "Godot" SecGodot

  SetOutPath "$INSTDIR"
  
  ;ADD YOUR OWN FILES HERE...
  StrCpy $originalName "Godot_v3.3.4-stable_mono_win64.exe"
  StrCpy $exeName "Godot.exe"

  File "${originalName}" #<----------- ERROR HERE : File: "${originalName}" -> no files found.
  Rename "${originalName}" "{$exeName}"

  SetOutPath "$INSTDIR\GodotSharp"
  File /nonfatal /a /r "GodotSharp\"
  
  ;Store installation folder
  WriteRegStr HKCU "Software\Godot" "" $INSTDIR
  
  ;Create uninstaller
  WriteUninstaller "$INSTDIR\Uninstall.exe"
  
  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
    
    ;Create shortcuts
    CreateDirectory "$SMPROGRAMS$StartMenuFolder"
    CreateShortcut "$SMPROGRAMS$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe"

    CreateShortcut "$SMPROGRAMS$StartMenuFolder\Godot.lnk" "$INSTDIR${exeName}"
  
  !insertmacro MUI_STARTMENU_WRITE_END

SectionEnd

感谢您的帮助

只有在终端用户机器上 运行 时才能扩展变量。 File 需要您机器上的文件名。为此,请使用 define:

!define foo "bar"
File "${foo}.exe" ; bar.exe

这不会帮助您更改名称,它只是说明如何使用定义。

在这种特定情况下您不需要定义,您可以设置特定的输出名称:

SetOutPath $InstDir
File "/oname=Godot.exe" "Godot_v3.3.4-stable_mono_win64.exe"