• 给快捷方式添加启动参数

    1
    CreateShortCut "$DESKTOP\Xxx.lnk" "$INSTDIR\Application\chrome.exe" "https://l2m2.top"

    CreateShortCut的具体用法:

    1
    CreateShortCut link.lnk target.file [parameters [icon.file [icon_index_number [start_options [keyboard_shortcut [description]]]]]]
  • 取消完成页的启动程序

    注释掉 !define MUI_FINISHPAGE_RUN所在行

    1
    ;!define MUI_FINISHPAGE_RUN "$INSTDIR\Application\chrome.exe"
  • 取消License页面

    注释掉!insertmacro MUI_PAGE_LICENSE所在行

    1
    ;!insertmacro MUI_PAGE_LICENSE "..\..\..\path\to\licence\YourSoftwareLicence.txt"
  • 执行某个批处理文件直到它退出

    1
    ExecWait '"$INSTDIR\somebat.bat"'

    ExecWait的具体用法:

    1
    ExecWait command [user_var(exit code)]
  • 判断安装路径中是否有中文

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    !define MUI_PAGE_CUSTOMFUNCTION_LEAVE "VerifyInstDir"
    !insertmacro MUI_PAGE_DIRECTORY

    Function VerifyInstDir
    StrCpy $0 $INSTDIR
    StrLen $1 $0
    StrCpy $2 ''

    ; 每个中文会给strlen增加2,所以copy 1个字符时,会遇到不可显示字符,会被NSIS自动改成?
    ; 正好?本身是非法路径,所以可以用这个来判断路径是否非法
    ${Do}
    IntOp $1 $1 - 1
    ${IfThen} $1 < 0 ${|}${ExitDo}${|}
    StrCpy $2 $0 1 $1
    ${IfThen} $2 == '?' ${|}${ExitDo}${|}
    ${Loop}

    ${If} $2 == '?'
    MessageBox MB_ICONEXCLAMATION|MB_OK|MB_TOPMOST "安装路径不能含有中文等宽字节字符。"
    Abort
    ${EndIf}
    FunctionEnd

Reference