VIAddversionKey

本文深入解析了VIAddversionKey的功能及其在安装程序属性版本表中的应用,详细介绍了如何通过该工具为生成的INSTALL.EXE添加版本信息,包括产品名称、公司、生产版本等,同时探讨了这些信息在INSTALL.EXE图标下的展示方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VIAddversionKey的作用是“在文件属性的版本表格里添加一个字段”,通俗的说就是当右键单击生成的“INSTALL.EXE”查看属性时,“版本”选项卡会显示相应的字段,如“产品名称、公司、生产版本”等。同时,在“INSTALL.EXE”图标下也会有文件描述和公司的信息显示出来。
# ===================== 外部插件以及宏 ============================= !include "StrFunc.nsh" !include "WordFunc.nsh" ${StrRep} ${StrStr} !include "LogicLib.nsh" !include "nsDialogs.nsh" !include "common.nsh" !include "x64.nsh" !include "MUI.nsh" !include "WinVer.nsh" !include "..\commonfunc.nsh" VIProductVersion "${PRODUCT_VERSION}" VIAddVersionKey "ProductVersion" "${PRODUCT_VERSION}" VIAddVersionKey "ProductName" "${PRODUCT_NAME}" VIAddVersionKey "CompanyName" "${PRODUCT_PUBLISHER}" VIAddVersionKey "FileVersion" "${PRODUCT_VERSION}" VIAddVersionKey "InternalName" "${EXE_NAME}" VIAddVersionKey "FileDescription" "${PRODUCT_NAME}" VIAddVersionKey "LegalCopyright" "${PRODUCT_LEGAL}" !define INSTALL_PAGE_CONFIG 0 ;!define INSTALL_PAGE_LICENSE 1 !define INSTALL_PAGE_PROCESSING 1 !define INSTALL_PAGE_FINISH 2 !define INSTALL_PAGE_UNISTCONFIG 3 !define INSTALL_PAGE_UNISTPROCESSING 4 !define INSTALL_PAGE_UNISTFINISH 5 ; 新增:定义防火墙规则名称(唯一标识,用于卸载时删除) !define FW_RULE_NAME_DC_IN "DTEN_DispatchController" !define FW_RULE_NAME_DC_OUT "DTEN_DispatchController(OUT)" !define FW_RULE_NAME_DTENAPP_IN "DTENApp" !define FW_RULE_NAME_DTENAPP_OUT "DTENApp(OUT)" Page custom DUIPage UninstPage custom un.DUIPage Var hInstallDlg Var hInstallSubDlg Var sCmdFlag Var sCmdSetupPath Var sSetupPath Var sReserveData #卸载时是否保留数据 Var InstallState #是在安装中还是安装完成 Var UnInstallValue #卸载的进度 Var temp11 Var temp12 Function DUIPage StrCpy $InstallState "0" #设置未安装完成状态 InitPluginsDir SetOutPath "$PLUGINSDIR" File "${INSTALL_LICENCE_FILENAME}" File "${INSTALL_RES_PATH}" File /oname=logo.ico "${INSTALL_ICO}" #此处的目标文件一定是logo.ico,否则控件将找不到文件 nsNiuniuSkin::InitSkinPage "$PLUGINSDIR\" "${INSTALL_LICENCE_FILENAME}" #指定插件路径及协议文件名称 Pop $hInstallDlg #生成安装路径,包含识别旧的安装路径 Call GenerateSetupAddress #设置控件显示安装路径 nsNiuniuSkin::SetControlAttribute $hInstallDlg "editDir" "text" "$INSTDIR\" Call OnRichEditTextChange #设置安装包的标题及任务栏显示 nsNiuniuSkin::SetWindowTile $hInstallDlg "${PRODUCT_NAME} Install" nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_CONFIG} nsNiuniuSkin::SetControlAttribute $hInstallDlg "licensename" "text" "License and Terms" Call BindUIControls nsNiuniuSkin::ShowPage 0 FunctionEnd Function un.DUIPage StrCpy $InstallState "0" InitPluginsDir SetOutPath "$PLUGINSDIR" File "${INSTALL_RES_PATH}" File /oname=logo.ico "${UNINSTALL_ICO}" nsNiuniuSkin::InitSkinPage "$PLUGINSDIR\" "" Pop $hInstallDlg nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_UNISTCONFIG} nsNiuniuSkin::SetWindowTile $hInstallDlg "${PRODUCT_NAME} Uninstall" nsNiuniuSkin::SetWindowSize $hInstallDlg 680 413 Call un.BindUnInstUIControls nsNiuniuSkin::ShowPage 0 FunctionEnd #绑定卸载的事件 Function un.BindUnInstUIControls GetFunctionAddress $0 un.ExitDUISetup nsNiuniuSkin::BindCallBack $hInstallDlg "btnUninstalled" $0 GetFunctionAddress $0 un.onUninstall nsNiuniuSkin::BindCallBack $hInstallDlg "btnUnInstall" $0 GetFunctionAddress $0 un.ExitDUISetup nsNiuniuSkin::BindCallBack $hInstallDlg "btnClose" $0 FunctionEnd #绑定安装的界面事件 Function BindUIControls # License页面 GetFunctionAddress $0 OnExitDUISetup nsNiuniuSkin::BindCallBack $hInstallDlg "btnLicenseClose" $0 GetFunctionAddress $0 OnBtnMin nsNiuniuSkin::BindCallBack $hInstallDlg "btnLicenseMin" $0 GetFunctionAddress $0 OnBtnLicenseClick nsNiuniuSkin::BindCallBack $hInstallDlg "btnAgreement" $0 GetFunctionAddress $0 OnExitDUISetup nsNiuniuSkin::BindCallBack $hInstallDlg "btnDirClose" $0 GetFunctionAddress $0 OnExitDUISetup nsNiuniuSkin::BindCallBack $hInstallDlg "btnLicenseCancel" $0 GetFunctionAddress $0 OnBtnMin nsNiuniuSkin::BindCallBack $hInstallDlg "btnDirMin" $0 GetFunctionAddress $0 OnBtnSelectDir nsNiuniuSkin::BindCallBack $hInstallDlg "btnSelectDir" $0 GetFunctionAddress $0 OnBtnDirPre nsNiuniuSkin::BindCallBack $hInstallDlg "btnDirPre" $0 GetFunctionAddress $0 OnBtnShowConfig nsNiuniuSkin::BindCallBack $hInstallDlg "btnAgree" $0 GetFunctionAddress $0 OnBtnCancel nsNiuniuSkin::BindCallBack $hInstallDlg "btnDirCancel" $0 GetFunctionAddress $0 OnBtnInstall nsNiuniuSkin::BindCallBack $hInstallDlg "btnInstall" $0 GetFunctionAddress $0 OnExitDUISetup nsNiuniuSkin::BindCallBack $hInstallDlg "btnDetailClose" $0 GetFunctionAddress $0 OnBtnMin nsNiuniuSkin::BindCallBack $hInstallDlg "btnDetailMin" $0 GetFunctionAddress $0 OnFinished nsNiuniuSkin::BindCallBack $hInstallDlg "btnRun" $0 GetFunctionAddress $0 OnBtnMin nsNiuniuSkin::BindCallBack $hInstallDlg "btnFinishedMin" $0 GetFunctionAddress $0 OnExitDUISetup nsNiuniuSkin::BindCallBack $hInstallDlg "btnClose" $0 GetFunctionAddress $0 OnCheckLicenseClick nsNiuniuSkin::BindCallBack $hInstallDlg "chkAgree" $0 GetFunctionAddress $0 OnBtnShowMore nsNiuniuSkin::BindCallBack $hInstallDlg "btnShowMore" $0 GetFunctionAddress $0 OnBtnHideMore nsNiuniuSkin::BindCallBack $hInstallDlg "btnHideMore" $0 #绑定窗口通过alt+f4等方式关闭时的通知事件 GetFunctionAddress $0 OnSysCommandCloseEvent nsNiuniuSkin::BindCallBack $hInstallDlg "syscommandclose" $0 #绑定路径变化的通知事件 GetFunctionAddress $0 OnRichEditTextChange nsNiuniuSkin::BindCallBack $hInstallDlg "editDir" $0 FunctionEnd #此处是路径变化时的事件通知 Function OnRichEditTextChange #可在此获取路径,判断是否合法等处理 nsNiuniuSkin::GetControlAttribute $hInstallDlg "editDir" "text" Pop $0 StrCpy $INSTDIR "$0" Call IsSetupPathIlleagal ${If} $R5 == "0" nsNiuniuSkin::SetControlAttribute $hInstallDlg "local_space" "text" "Illegal path" nsNiuniuSkin::SetControlAttribute $hInstallDlg "local_space" "textcolor" "#ffff0000" nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "false" goto TextChangeAbort ${EndIf} nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkAgree" "selected" Pop $0 ${If} $0 == "1" nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "true" ${Else} nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "false" ${EndIf} TextChangeAbort: FunctionEnd #根据选中的情况来控制按钮是否灰度显示 Function OnCheckLicenseClick nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkAgree" "selected" Pop $0 ${If} $0 == "0" nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "true" ${Else} nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "false" ${EndIf} FunctionEnd Function OnBtnLicenseClick ;nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_LICENSE} nsNiuniuSkin::SetControlAttribute $hInstallDlg "licenseshow" "visible" "true" nsNiuniuSkin::GetControlAttribute $hInstallDlg "moreconfiginfo" "visible" Pop $0 ${If} $0 = 0 ;pos="10,35,560,405" nsNiuniuSkin::SetControlAttribute $hInstallDlg "licenseshow" "pos" "0,35,680,495" nsNiuniuSkin::SetControlAttribute $hInstallDlg "editLicense" "height" "300" ${Else} nsNiuniuSkin::SetControlAttribute $hInstallDlg "licenseshow" "pos" "0,35,680,505" nsNiuniuSkin::SetControlAttribute $hInstallDlg "editLicense" "height" "300" ${EndIf} FunctionEnd Function InstallServices nsExec::Exec "sc stop DTENByodAutoDev" Sleep 10000 nsProcess::_KillProcess "${SERVICES_NAME}" nsExec::Exec "sc delete DTENByodAutoDev" nsExec::Exec "$INSTDIR\${SERVICES_NAME} install" nsExec::Exec "net start DTENByodAutoDev" FunctionEnd # 添加一个静默安装的入口 Section "silentInstallSec" SEC01 #MessageBox MB_OK|MB_ICONINFORMATION "Test silent install. you can add your silent install code here." SectionEnd Function ShowMsgBox nsNiuniuSkin::InitSkinSubPage "msgBox.xml" "btnOK,btnClose" "btnCancel" ; "提示" "${PRODUCT_NAME} 正在运行,请退出后重试!" 0 Pop $hInstallSubDlg nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "lblTitle" "text" "tip" nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "lblMsg" "text" "$R8" ${If} "$R7" == "1" nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "hlCancel" "visible" "true" ${EndIf} nsNiuniuSkin::ShowSkinSubPage 0 FunctionEnd # 开始安装 Function OnBtnInstall nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkAgree" "selected" Pop $0 StrCpy $0 "1" #如果未同意,直接退出 StrCmp $0 "0" InstallAbort 0 nsProcess::_KillProcess "${EXE_NAME}" Sleep 50 nsProcess::_KillProcess "${EXE_UPDATE_NAME}" Sleep 50 nsNiuniuSkin::GetControlAttribute $hInstallDlg "editDir" "text" Pop $0 StrCmp $0 "" InstallAbort 0 #校正路径(追加) Call AdjustInstallPath StrCpy $sSetupPath "$INSTDIR" Call IsSetupPathIlleagal ${If} $R5 == "0" StrCpy $R8 "The path is illegal!" StrCpy $R7 "0" Call ShowMsgBox goto InstallAbort ${EndIf} nsNiuniuSkin::SetWindowSize $hInstallDlg 680 369 nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnClose" "enabled" "false" nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_PROCESSING} nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "min" "0" nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "max" "100" # 将这些文件暂存到临时目录 #Call BakFiles #启动一个低优先级的后台线程 GetFunctionAddress $0 ExtractFunc BgWorker::CallAndWait #根据复选框的值来决定是否添加桌面快捷方式 nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkShotcut" "selected" Pop $R0 #${If} $R0 == "1" #添加到桌面快捷方式的动作 在此添加 SetShellVarContext all CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\${EXE_NAME}" SetShellVarContext current #${EndIf} Call CreateAppShortcut Call CreateUninstall GetFunctionAddress $0 InstallServices BgWorker::CallAndWait ; 新增:安装完成后添加防火墙规则 Call AddFirewallRules nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnClose" "enabled" "true" StrCpy $InstallState "1" #如果不想完成立即启动的话,需要屏蔽下面的OnFinished的调用,并且打开显示INSTALL_PAGE_FINISH #Call OnFinished #以下这行如果打开,则是跳转到完成页面 WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "DTENAPP" "$INSTDIR\${EXE_NAME}" nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress1" "value" "100" nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_FINISH} nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress1" "value" "100" AccessControl::GrantOnFile \ "$INSTDIR" "(BU)" "FullAccess" Pop $0 nsNiuniuSkin::SetWindowSize $hInstallDlg 680 453 InstallAbort: FunctionEnd Function ExtractCallback Pop $1 Pop $2 System::Int64Op $1 * 100 Pop $3 System::Int64Op $3 / $2 Pop $0 nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "value" "$0" nsNiuniuSkin::SetControlAttribute $hInstallDlg "progress_pos" "text" "$0%" ${If} $1 == $2 nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "value" "98" nsNiuniuSkin::SetControlAttribute $hInstallDlg "progress_pos" "text" "98%" ${EndIf} FunctionEnd #CTRL+F4关闭时的事件通知 Function OnSysCommandCloseEvent Call OnExitDUISetup FunctionEnd #安装界面点击退出,给出提示 Function OnExitDUISetup ${If} $InstallState == "0" StrCpy $R8 "Exiting will interrupt the installation" StrCpy $R7 "1" Call ShowMsgBox pop $0 ${If} $0 == 1 goto endfun ${EndIf} ${EndIf} nsNiuniuSkin::ExitDUISetup endfun: FunctionEnd Function OnBtnMin SendMessage $hInstallDlg ${WM_SYSCOMMAND} 0xF020 0 FunctionEnd Function OnBtnCancel nsNiuniuSkin::ExitDUISetup FunctionEnd Function OnFinished #立即启动 Exec "$INSTDIR\${EXE_NAME}" Call OnExitDUISetup FunctionEnd Function OnBtnSelectDir nsNiuniuSkin::SelectInstallDirEx $hInstallDlg "Please select the installation path" Pop $0 ${Unless} "$0" == "" nsNiuniuSkin::SetControlAttribute $hInstallDlg "editDir" "text" $0 ${EndUnless} FunctionEnd Function StepHeightSizeAsc ${ForEach} $R0 469 479 + 10 nsNiuniuSkin::SetWindowSize $hInstallDlg 680 $R0 Sleep 5 ${Next} FunctionEnd Function StepHeightSizeDsc ${ForEach} $R0 680 469 - 10 nsNiuniuSkin::SetWindowSize $hInstallDlg 680 $R0 Sleep 5 ${Next} FunctionEnd Function OnBtnShowMore nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "enabled" "false" nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "enabled" "false" nsNiuniuSkin::SetControlAttribute $hInstallDlg "moreconfiginfo" "visible" "true" nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "visible" "true" nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "visible" "false" ;调整窗口高度 ;GetFunctionAddress $0 StepHeightSizeAsc BgWorker::CallAndWait nsNiuniuSkin::SetWindowSize $hInstallDlg 680 534 nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "enabled" "true" nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "enabled" "true" FunctionEnd Function OnBtnHideMore nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "enabled" "false" nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "enabled" "false" nsNiuniuSkin::SetControlAttribute $hInstallDlg "moreconfiginfo" "visible" "false" nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "visible" "false" nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "visible" "true" ;调整窗口高度 ;GetFunctionAddress $0 StepHeightSizeDsc BgWorker::CallAndWait nsNiuniuSkin::SetWindowSize $hInstallDlg 680 469 nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "enabled" "true" nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "enabled" "true" FunctionEnd Function OnBtnShowConfig ;nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_CONFIG} nsNiuniuSkin::SetControlAttribute $hInstallDlg "licenseshow" "visible" "false" nsNiuniuSkin::SetControlAttribute $hInstallDlg "chkAgree" "selected" "true" nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "true" FunctionEnd Function OnBtnDirPre FunctionEnd Function un.ShowMsgBox nsNiuniuSkin::InitSkinSubPage "msgBox.xml" "btnOK" "btnCancel,btnClose" ; "提示" "${PRODUCT_NAME} 正在运行,请退出后重试!" 0 Pop $hInstallSubDlg nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "lblTitle" "text" "tip" nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "lblMsg" "text" "$R8" ${If} "$R7" == "1" nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "hlCancel" "visible" "true" ${EndIf} nsNiuniuSkin::ShowSkinSubPage 0 FunctionEnd Function un.ExitDUISetup nsNiuniuSkin::ExitDUISetup FunctionEnd # 添加一个静默卸载的入口 Section "un.silentInstallSec" SEC02 #MessageBox MB_OK|MB_ICONINFORMATION "Test silent install. you can add your silent uninstall code here." SectionEnd Function un.unInstallServices nsExec::Exec "sc stop DTENByodAutoDev" Sleep 10000 nsProcess::_KillProcess "${SERVICES_NAME}" nsExec::Exec "sc delete DTENByodAutoDev" FunctionEnd #执行具体的卸载 Function un.onUninstall nsProcess::_KillProcess "${EXE_NAME}" Sleep 100 nsProcess::_KillProcess "${EXE_UPDATE_NAME}" Sleep 100 nsNiuniuSkin::SetWindowSize $hInstallDlg 680 369 #此处检测当前是否有程序正在运行,如果正在运行,提示先卸载再安装 nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnClose" "enabled" "false" nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_UNISTPROCESSING} DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "DTENAPP" nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrUnInstProgress" "min" "0" nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrUnInstProgress" "max" "100" GetFunctionAddress $0 un.unInstallServices BgWorker::CallAndWait ; 新增:卸载服务后删除防火墙规则 Call un.RemoveFirewallRules IntOp $UnInstallValue 0 + 1 Call un.DeleteShotcutAndInstallInfo IntOp $UnInstallValue $UnInstallValue + 8 #删除文件 GetFunctionAddress $0 un.RemoveFiles BgWorker::CallAndWait InstallAbort: FunctionEnd #在线程中删除文件,以便显示进度 Function un.RemoveFiles ${Locate} "$INSTDIR" "/G=0 /M=*.*" "un.onDeleteFileFound" StrCpy $InstallState "1" nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnClose" "enabled" "true" nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrUnInstProgress" "value" "100" nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_UNISTFINISH} nsNiuniuSkin::SetControlAttribute $hInstallDlg "unslrProgress" "value" "100" nsNiuniuSkin::SetWindowSize $hInstallDlg 680 453 FunctionEnd #卸载程序时删除文件的流程,如果有需要过滤的文件,在此函数中添加 Function un.onDeleteFileFound ; $R9 "path\name" ; $R8 "path" ; $R7 "name" ; $R6 "size" ($R6 = "" if directory, $R6 = "0" if file with /S=) #是否过滤删除 Delete "$R9" RMDir /r "$R9" RMDir "$R9" IntOp $UnInstallValue $UnInstallValue + 2 ${If} $UnInstallValue > 100 IntOp $UnInstallValue 100 + 0 nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrUnInstProgress" "value" "100" ${Else} nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrUnInstProgress" "value" "$UnInstallValue" nsNiuniuSkin::SetControlAttribute $hInstallDlg "un_progress_pos" "text" "$UnInstallValue%" #Sleep 100 ${EndIf} undelete: Push "LocateNext" FunctionEnd ; ================================================== ; 新增:添加防火墙策略函数 ; 功能:为DispatchController.exe添加入站和出站规则 ; ================================================== Function AddFirewallRules ; -------------------------- ; DispatchController.exe 规则 ; -------------------------- ; 检查入站规则是否已存在,避免重复添加 nsExec::ExecToStack 'netsh advfirewall firewall show rule name="${FW_RULE_NAME_DC_IN}"' Pop $0 ; 退出代码(0=存在,非0=不存在) Pop $1 ; 输出信息(忽略) ; 如果规则不存在则添加 ${If} $0 != 0 ; 入站规则:允许UDP 9111端口 nsExec::Exec 'netsh advfirewall firewall add rule name="${FW_RULE_NAME_DC_IN}" dir=in action=allow program="$INSTDIR\DispatchController.exe" protocol=udp localport=9111 enable=yes' ${EndIf} ; 检查出站规则是否存在 nsExec::ExecToStack 'netsh advfirewall firewall show rule name="${FW_RULE_NAME_DC_OUT}"' Pop $0 Pop $1 ; 如果规则不存在则添加 ${If} $0 != 0 ; 出站规则:允许所有端口和协议 nsExec::Exec 'netsh advfirewall firewall add rule name="${FW_RULE_NAME_DC_OUT}" dir=out action=allow program="$INSTDIR\DispatchController.exe" enable=yes' ${EndIf} ; -------------------------- ; DTENApp.exe 规则 ; -------------------------- ; 检查入站规则是否已存在,避免重复添加 nsExec::ExecToStack 'netsh advfirewall firewall show rule name="${FW_RULE_NAME_DTENAPP_IN}"' Pop $0 Pop $1 ${If} $0 != 0 ; 入站:允许所有协议、所有端口 nsExec::Exec 'netsh advfirewall firewall add rule name="${FW_RULE_NAME_DTENAPP_IN}" dir=in action=allow program="$INSTDIR\DTENApp.exe" enable=yes' ${EndIf} ; 添加出站规则(不限制协议和端口) nsExec::ExecToStack 'netsh advfirewall firewall show rule name="${FW_RULE_NAME_DTENAPP_OUT}"' Pop $0 Pop $1 ${If} $0 != 0 ; 出站:允许所有协议、所有端口 nsExec::Exec 'netsh advfirewall firewall add rule name="${FW_RULE_NAME_DTENAPP_OUT}" dir=out action=allow program="$INSTDIR\DTENApp.exe" enable=yes' ${EndIf} FunctionEnd ; ================================================== ; 新增:移除防火墙策略函数 ; 功能:卸载时删除安装时添加的防火墙规则 ; ================================================== Function un.RemoveFirewallRules ; -------------------------- ; 删除DispatchController.exe规则 ; -------------------------- ; 删除入站规则(忽略不存在的情况) nsExec::Exec 'netsh advfirewall firewall delete rule name="${FW_RULE_NAME_DC_IN}" program="$INSTDIR\DispatchController.exe"' ; 删除出站规则(忽略不存在的情况) nsExec::Exec 'netsh advfirewall firewall delete rule name="${FW_RULE_NAME_DC_OUT}" program="$INSTDIR\DispatchController.exe"' ; -------------------------- ; 删除DTENApp.exe规则 ; -------------------------- ; 删除入站规则 nsExec::Exec 'netsh advfirewall firewall delete rule name="${FW_RULE_NAME_DTEN_IN}" program="$INSTDIR\DTENApp.exe"' ; 删除出站规则 nsExec::Exec 'netsh advfirewall firewall delete rule name="${FW_RULE_NAME_DTEN_OUT}" program="$INSTDIR\DTENApp.exe"' FunctionEnd这是一个nsis打包脚本,存在一个问题,用新的安装包安装程序,DTENByodAutoDev这个程序没有被覆盖,依旧是旧程序的exe,找出问题并修复他
最新发布
07-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值