设为首页 |收藏本站 |切换到宽版
 找回密码

NSIS中文论坛

查看: 196|回复: 1
收起左侧

[教程] NSIS打包单文件时的主程序参数传导示例

[复制链接]
  • TA的每日心情
    慵懒
    2016-12-20 21:05
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    14

    主题

    56

    帖子

    688

    积分

    积分
    688
    发表于 2020-5-24 13:18:51 | 显示全部楼层 |阅读模式
    本帖最后由 Nanlon 于 2020-6-30 09:47 编辑

    在我们打包某些带有特殊启动参数的程序为单文件时,为了使主程序参数能在打包后被正常使用,需要将参数传递到单文件安装包外部。这个示例即为演示如何实现此功能!


    1. # Include
    2. !include "FileFunc.nsh"

    3. # APP
    4. !define APPNAME "Test"
    5. !define APP_VER "1.0.0.0"
    6. !define APP_PUB "nanlon.cn"
    7. !define DIR_TMP "TestTmp"

    8. # VER
    9. VIProductVersion "${APP_VER}"
    10. VIAddVersionKey /LANG=2052 "ProductName"     "${APPNAME}"
    11. VIAddVersionKey /LANG=2052 "ProductVersion"  "${APP_VER}"
    12. VIAddVersionKey /LANG=2052 "LegalCopyright"  "© ${APP_PUB}. All Right Reserved."
    13. VIAddVersionKey /LANG=2052 "FileDescription" "${APPNAME}"
    14. VIAddVersionKey /LANG=2052 "FileVersion"     "${APP_VER}"

    15. # SET
    16. Unicode true
    17. SetOverwrite try
    18. SilentInstall silent
    19. RequestExecutionLevel admin

    20. # Setup
    21. Name "${APPNAME}"
    22. OutFile "${APPNAME}_v${APP_VER}.exe"

    23. # --- Init Function ---

    24. Function .onInit
    25.     InitPluginsDir
    26.    
    27.     # Create Mutex
    28.     System::Call `kernel32::CreateMutex(i0,i0,t"${APPNAME}_installer")i.r1?e`
    29.     Pop $R0
    30.     StrCmp $R0 0 +3
    31.     MessageBox MB_OK|MB_ICONEXCLAMATION "程序已在运行,不能重复打开!"
    32.     Abort
    33.    
    34.     Var /GLOBAL Command
    35.     ${GetParameters} $Command

    36.     # Out Files
    37.     SetOutPath "$TEMP\${DIR_TMP}"
    38.     File /r ".\${APPNAME}\*.*"
    39.    
    40. # --- RunExe ---
    41.    
    42.     ${If} $Command == "/i"                                # 带参数 "/i" 运行时执行
    43.     ExecWait `"$TEMP\${DIR_TMP}\${APPNAME}.exe" /i`  /*       /i          */
    44.     ${ElseIf} $Command == "-q"                            # 带参数 "-q" 运行时执行
    45.     ExecWait `"$TEMP\${DIR_TMP}\${APPNAME}.exe" -q`  /*       -q          */
    46.     ${Else}                                          # 不带参数或输入了其他错误参数时
    47.     ExecWait "$TEMP\${DIR_TMP}\${APPNAME}.exe"
    48.     ${EndIf}

    49. # --- Uninst ---

    50.     # Delete Files
    51.     SetOutPath "$TEMP"
    52.     RMDir /r "$TEMP\${DIR_TMP}"

    53.     Abort
    54. FunctionEnd

    55. Section -

    56. SectionEnd
    复制代码


    评分

    参与人数 1金钱 +6 收起 理由
    飞翔 + 6

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 13:52
  • 签到天数: 599 天

    [LV.9]以坛为家II

    12

    主题

    49

    帖子

    9533

    积分

    积分
    9533
    发表于 2020-5-24 17:00:02 | 显示全部楼层
    多谢!慢慢消化。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|联系我们|鲁ICP备12005273号 |  

    © 2015-2020 nsisfans.com.   All Rights Reserved.

    快速回复 返回顶部 返回列表