【问题标题】:How I can use selected language for uninstaller?如何使用选定的语言进行卸载程序?
【发布时间】:2015-09-23 20:46:07
【问题描述】:

我的.nsi 使用了这个配置:

#########################################################################
## Language Selection Dialog Settings

## Remember the installer language
!define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
!define MUI_LANGDLL_REGISTRY_KEY "Software\${APP_COMPANY}\${APP_PRODUCT}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"

## Languages (first language is the default language)
!insertmacro MUI_LANGUAGE "Portuguese"
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "French"
!insertmacro MUI_LANGUAGE "Spanish"
!insertmacro MUI_LANGUAGE "Dutch"


## Language selection functions (for install and uninstall)
Function .onInit
  !insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd

## Uninstaller Functions
Function un.onInit
   !insertmacro MUI_UNGETLANGUAGE
FunctionEnd

但是当我尝试卸载时,卸载程序每次都会向我显示语言对话框。

我按照 MUI2 README 进行操作,但我不知道自己做错了什么。

【问题讨论】:

    标签: dialog nsis uninstallation


    【解决方案1】:

    由 MUI_LANGDLL_REGISTRY_* 指定的注册表值由 MUI 自动保存在 MUI_PAGE_INSTFILES 页面上。如果您不使用此页面,则可以自己调用 MUI_LANGDLL_SAVELANGUAGE 宏或手动写入 $LANGUAGE 的值。

    我建议只使用 MUI_PAGE_INSTFILES 页面,这样一切都会为您处理好:

    !define APP_COMPANY "Foo"
    !define APP_PRODUCT "Bar"
    !include MUI2.nsh
    InstallDir "$Temp\Test"
    RequestExecutionLevel user
    
    #########################################################################
    ## Language Selection Dialog Settings
    
    ## Remember the installer language
    !define MUI_LANGDLL_REGISTRY_ROOT HKCU
    !define MUI_LANGDLL_REGISTRY_KEY "Software\${APP_COMPANY}\${APP_PRODUCT}"
    !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
    
    !insertmacro MUI_PAGE_WELCOME
    !insertmacro MUI_PAGE_DIRECTORY
    !insertmacro MUI_PAGE_INSTFILES
    !insertmacro MUI_PAGE_FINISH
    !insertmacro MUI_UNPAGE_CONFIRM
    !insertmacro MUI_UNPAGE_INSTFILES
    
    
    ## Languages (first language is the default language)
    !insertmacro MUI_LANGUAGE "Portuguese"
    !insertmacro MUI_LANGUAGE "English"
    !insertmacro MUI_LANGUAGE "French"
    !insertmacro MUI_LANGUAGE "Spanish"
    !insertmacro MUI_LANGUAGE "Dutch"
    
    
    ## Language selection functions (for install and uninstall)
    Function .onInit
      !insertmacro MUI_LANGDLL_DISPLAY
    FunctionEnd
    
    ## Uninstaller Functions
    Function un.onInit
       !insertmacro MUI_UNGETLANGUAGE
    FunctionEnd
    
    Section
    SetOutPath $InstDir
    WriteUninstaller "$InstDir\Uninst.exe"
    SectionEnd
    
    Section Uninstall
    DeleteRegKey HKCU "Software\${APP_COMPANY}\${APP_PRODUCT}"
    DeleteRegKey /IfEmpty HKCU "Software\${APP_COMPANY}"
    Delete "$InstDir\Uninst.exe"
    RMDir $InstDir
    SectionEnd
    

    【讨论】:

    • 谢谢,我曾研究过 OP 的测试用例,但没有找到为什么从未写入注册表项。很高兴知道。
    • @Anders 我有 MUI_PAGE_INSTFILES 但卸载程序向我显示语言对话框...
    • @JorgeB。那为什么您的示例代码中缺少它?当我尝试它时它起作用了。您使用的是 NSIS v3 还是 v2.46?
    • 我解决了将 MUI_LANGDLL_REGISTRY_* 更改为 MUI_PAGE_* 之前的问题。谢谢你的帮助。
    猜你喜欢
    • 2011-07-05
    • 2011-08-06
    • 2012-09-28
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 2010-11-23
    相关资源
    最近更新 更多