【问题标题】:In NSIS, how can I rename or copy a file with a user variable?在 NSIS 中,如何使用用户变量重命名或复制文件?
【发布时间】:2021-11-12 16:11:28
【问题描述】:

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

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

我阅读了文档,但不清楚用户变量的用法。我总是得到一个错误,告诉 $var name 不存在。

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

感谢您的帮助

【问题讨论】:

    标签: nsis


    【解决方案1】:

    变量只能在最终用户机器上运行时进行扩展。 File 需要您机器上的文件名。为此,请使用定义:

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

    这并不能帮助您更改名称,它仅显示定义的使用方式。

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

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

    【讨论】:

    • 我希望能够在卸载程序或其他有用的地方使用该名称。这就是为什么我尝试使用变量而不是每次都用版本号硬编码全名的主要目的。
    • 然后使用定义。定义只是简单的文本替换。
    猜你喜欢
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2014-07-19
    • 2015-08-15
    • 1970-01-01
    • 2018-08-09
    相关资源
    最近更新 更多