更改我的NSIS安装程序应用程序版本

更改我的NSIS安装程序应用程序版本,nsis,Nsis,我正在更新现有应用程序,并希望设置新的应用程序版本号。我用了这个!定义版本“版本号”,但应用程序仍保留以前的版本号。我也一直在寻找解决方案,但没有一个可以显示并更改版本号。我想显示的版本号是2.1.1259.1,但它一直返回旧的2.0.236.1258 代码如下所示: ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "Application Name" !define PRODUCT_VERSION "2.1.1259.1" !d

我正在更新现有应用程序,并希望设置新的应用程序版本号。我用了这个!定义版本“版本号”,但应用程序仍保留以前的版本号。我也一直在寻找解决方案,但没有一个可以显示并更改版本号。我想显示的版本号是2.1.1259.1,但它一直返回旧的2.0.236.1258

代码如下所示:

; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "Application Name"
!define PRODUCT_VERSION "2.1.1259.1"
!define VERSION "2.1.1259.1"
!define PRODUCT_PUBLISHER "CompanyName"
!define PRODUCT_WEB_SITE "http://www.CompanyName.com"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"


Var InDebugMode
Var SQLAccountType
Var SQLUSER
Var SQLPASSWORD
Var SQLSERVER
Var RunInstalls
Var CurrentStep
Var InstallDB
Var SupportedVersions
Var SetupFileName
Var InstallsPath

; MUI 1.67 compatible ------
!include "MUI.nsh"
!include "LogicLib.nsh"
!include "Source\Scripts\DotNetDetect.nsh"
!include "Source\Scripts\WriteToFile.nsh"
!include "Source\Scripts\Page_InstallerPage.nsh"
!include "Source\Scripts\TrimString.nsh"


!include WinMessages.nsh
!include "LogicLib.nsh"
!include "x64.nsh"
!include "Source\Scripts\StrRep.nsh"
!include "Source\Scripts\InstallerControl.nsh"
!include "Source\Scripts\ReplaceInFile.nsh"

!include "Source\Scripts\Debug.nsh"
!include "Source\Scripts\VersionCompare.nsh"
!include "Source\Scripts\CheckWindows.nsh"
!include "Source\Scripts\CheckDotNet4.nsh"
!include "Source\Scripts\CreateShortcuts.nsh"
!include "Source\Scripts\InstallFonts.nsh"

; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
!define UMUI_HEADERIMAGE_BMP "ilaundry-logo.bmp"
!define MUI_BGCOLOR  0xFFFFFF


!define MUI_PAGE_CUSTOMFUNCTION_PRE SkipOnRestart_Licence


!insertmacro MUI_PAGE_LICENSE "Source\Scripts\TAC.TXT"


Page custom Installer_Page_Start Installer_Page_Leave



!include "Source\Scripts\InstallCrystalReports.nsh"
!include "Source\Scripts\UpdateConfigFile.nsh"
!include "Source\Scripts\InstallSqlServer.nsh"
!include "Source\Scripts\InstallDatabase.nsh"
!include "Source\Scripts\InstallDigitalPersona.nsh"
!include "Source\Scripts\InstallAccessDBEngine.nsh"
!include "Source\Scripts\InstallApplication.nsh"
!include "Source\Scripts\InstallBackup.nsh"
!include "Source\Scripts\UninstallSqlServer.nsh"
!include "Source\Scripts\SplashController.nsh"


!define MUI_PAGE_CUSTOMFUNCTION_PRE Skip_Finish
!insertmacro MUI_PAGE_FINISH

; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES

; Language files
!insertmacro MUI_LANGUAGE "English"

; MUI end ------



Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
InstallDir "$PROGRAMFILES\ApplicationName"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show

Function SkipOnRestart_Licence
        ${IfNot} $CurrentStep == "new"
                 Abort
        ${EndIf}
FunctionEnd

Function Skip_Finish
         Abort
FunctionEnd

Function SharedOnInt

        InitPluginsDir
        File /oname=$PLUGINSDIR\InstallScreen.ini "Source\Scripts\InstallScreen.ini"

        StrCpy $InDebugMode 'True'
        StrCpy $RunInstalls 'True'

        strcpy $StepBeforeReboot "none"

        CALL LoadCurrentStep

        PUSH 'onInt - Start'
        PUSH ''
        CALL DumpValues

        SetRegView 64

        DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"

        SetRegView 32

        #call uninstallSQLServer

        writeUninstaller $INSTDIR\uninstaller.exe

        PUSH 'onInt - End'
        PUSH ''
        CALL DumpValues
FunctionEnd


Function .onGUIEnd
        ;Push '$INSTDIR\LogDump.txt'
        ;Call DumpLog
FunctionEnd

Var UnRegValue

# create a section to define what the uninstaller does.
# the section will always be named "Uninstall"
section "Uninstall"

# Always delete uninstaller first
delete $INSTDIR\uninstaller.exe

       ReadRegStr $UnRegValue HKLM "SOFTWARE\${PRODUCT_PUBLISHER}\${PRODUCT_NAME}\${PRODUCT_VERSION}" "InstalledSQL"
       ${If} $UnRegValue == "true"
          call un.uninstallSQLServer
       ${EndIf}


       ReadRegStr $UnRegValue HKLM "SOFTWARE\${PRODUCT_PUBLISHER}\${PRODUCT_NAME}\${PRODUCT_VERSION}" "InstalledCrystalReports"
       ${If} $UnRegValue == "true"
          call un.uninstallSQLServer
       ${EndIf}
    ;StrCmp $UnRegValue "true" UninstallSQLServer

sectionEnd

我意识到有很多!包括但为了节省问题空间,我暂时将其忽略,但如果您认为问题可能隐藏在其中一个问题中,我将添加特定的.nsh文件。任何帮助最终都将不胜感激。

产品版本只是一个定义,对编译器没有特殊意义,VI*属性用于在NSIS中设置版本信息

版本信息存储在和中。二进制块信息由
VIProductVersion
VIFileVersion
属性控制,字符串信息由
viadVersionKey
设置。这些属性甚至不存在于您发布的代码中,所以它们必须存在于.nsh文件中?也许你在不止一个地方设置它们

它应该是这样的:

!define PRODUCT_VERSION "2.1.1259.1"
!define VERSION "2.1.1259.1"

VIProductVersion "${PRODUCT_VERSION}"
VIFileVersion "${VERSION}"
VIAddVersionKey "FileVersion" "${VERSION}"
VIAddVersionKey "LegalCopyright" "(C) Blah blah Inc."
VIAddVersionKey "FileDescription" "Blah blah blergh fancy app"

如果在验证没有在多个位置设置信息后,仍然得到错误的值,则资源管理器可能正在缓存信息。您可以使用诸如…

之类的工具检查原始版本信息。应用程序版本号可能是在应用程序的源代码中定义的,而不是在安装程序中定义的。无论如何,您可能会阅读有关该功能的内容,以防万一……我插入了:VIFileVersion 2.1.1259.1和VIProductVersion 2.1.1259.1,工作正常,但当我检查应用程序属性时,它仍然与以前的相同。谢谢,但是我正在修复其他人的代码,所以我会检查他们是否在另一个.nsh文件中使用了它,否则我将使用资源黑客。非常感谢你。