Qt 5 软件发布===》插件路径
方法有三种,
方法有三种,
qt.conf
2. 放在可执行程序目录下
3. 设置系统变量QT_PLUGIN_PATH ,这里使用的是nsis打包工具,可参考“软件打包NSIS的使用,以及修改环境变量”
QT_PLUGIN_PATH : E:\share\projects\src\bin\plugins ;这里是我的路径,使用时要改成实际的插件路径
以下是NSIS脚本示例代码:
;ScriptgeneratedbytheHMNISEditScriptWizard.!include"StrFunc.nsh";HMNISEditWizardhelperdefines!definePRODUCT_NAME"Setup_Wintech"!definePRODUCT_VERSION"2.0"!definePRODUCT_PUBLISHER"WintechDigitalSystemsTechnologyCorp."!definePRODUCT_WEB_SITE"http://www.wintechdigital.com"!definePRODUCT_DIR_REGKEY"Software\Microsoft\Windows\CurrentVersion\AppPaths\makensis.exe"!definePRODUCT_UNINST_KEY"Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"!definePRODUCT_UNINST_ROOT_KEY"HKLM"!defineINSTALL_DIR_FILENAME"Wintech";MUI1.67compatible------!include"MUI.nsh"!include"LogicLib.nsh"!include"x64.nsh"!include"EnvVarUpdate.nsh";MUISettings!defineMUI_ABORTWARNING!defineMUI_ICON"${NSISDIR}\Contrib\Graphics\Icons\Wintech.ico"!defineMUI_UNICON"${NSISDIR}\Contrib\Graphics\Icons\Wintech.ico";Welcomepage!insertmacroMUI_PAGE_WELCOME;Licensepage;!insertmacroMUI_PAGE_LICENSE"${NSISDIR}\License.txt";Directorypage!insertmacroMUI_PAGE_DIRECTORY;Instfilespage!insertmacroMUI_PAGE_INSTFILES;Finishpage!defineMUI_FINISHPAGE_RUN"$INSTDIR\bin\wlp_exe_gui.exe"!insertmacroMUI_PAGE_FINISH;Uninstallerpages!insertmacroMUI_UNPAGE_INSTFILES;Languagefiles!insertmacroMUI_LANGUAGE"English"!echo"Testing";MUIend------RequestExecutionLeveladminName"${PRODUCT_NAME}${PRODUCT_VERSION}"OutFile"dlf_setup.exe"InstallDir"$PROGRAMFILES\${INSTALL_DIR_FILENAME}"InstallDirRegKeyHKLM"${PRODUCT_DIR_REGKEY}"""ShowInstDetailsshowShowUnInstDetailsshowSection"MainSection"SEC01${EnvVarUpdate}$0"PATH""A""HKLM""$INSTDIR\bin";appendstothesystempathSetOutPath"$INSTDIR"SetOverwriteifnewerFile"${NSISDIR}\makensis.exe"CreateDirectory"$INSTDIR"CreateShortCut"$SMPROGRAMS\${INSTALL_DIR_FILENAME}\${INSTALL_DIR_FILENAME}.lnk""$INSTDIR\makensis.exe"CreateShortCut"$DESKTOP\${INSTALL_DIR_FILENAME}.lnk""$INSTDIR\makensis.exe"File"${NSISDIR}\License.txt"File/r"setup\*";Detectwindowsis32bitor64bit${If}${RunningX64};64bitbitsgohereExec'"$INSTDIR\bin\driver\win7\Psexec.exe"-i-d-s"$INSTDIR\bin\driver\win7\install_wdf_driver.exe"';-i-d-s"$INSTDIR\bin\Driver\win7install_wdf_driver.exe"';Exec"$INSTDIR\bin\notepad2.exe"ExecWait"$INSTDIR\bin\vs2010sp1vcredist.exe"${Else};32bitbitsgohereExec'"$INSTDIR\bin\driver\win7\Psexec.exe"-i-d-s"$INSTDIR\bin\driver\win7\install_wdf_driver.exe"'ExecWait'"$INSTDIR\bin\vs2010sp1vcredist.exe"'${EndIf}SectionEndSection-AdditionalIconsWriteIniStr"$INSTDIR\${PRODUCT_NAME}.url""InternetShortcut""URL""${PRODUCT_WEB_SITE}"CreateShortCut"$SMPROGRAMS\MyScript\Website.lnk""$INSTDIR\${PRODUCT_NAME}.url"CreateShortCut"$SMPROGRAMS\MyScript\Uninstall.lnk""$INSTDIR\uninst.exe"SectionEndSection-PostWriteUninstaller"$INSTDIR\uninst.exe"WriteRegStrHKLM"${PRODUCT_DIR_REGKEY}""""$INSTDIR\makensis.exe"WriteRegStr${PRODUCT_UNINST_ROOT_KEY}"${PRODUCT_UNINST_KEY}""DisplayName""$(^Name)"WriteRegStr${PRODUCT_UNINST_ROOT_KEY}"${PRODUCT_UNINST_KEY}""UninstallString""$INSTDIR\uninst.exe"WriteRegStr${PRODUCT_UNINST_ROOT_KEY}"${PRODUCT_UNINST_KEY}""DisplayIcon""$INSTDIR\makensis.exe"WriteRegStr${PRODUCT_UNINST_ROOT_KEY}"${PRODUCT_UNINST_KEY}""DisplayVersion""${PRODUCT_VERSION}"WriteRegStr${PRODUCT_UNINST_ROOT_KEY}"${PRODUCT_UNINST_KEY}""URLInfoAbout""${PRODUCT_WEB_SITE}"WriteRegStr${PRODUCT_UNINST_ROOT_KEY}"${PRODUCT_UNINST_KEY}""Publisher""${PRODUCT_PUBLISHER}"SectionEndFunctionun.onUninstSuccessHideWindowMessageBoxMB_ICONINFORMATION|MB_OK"$(^Name)已成功地从你的计算机移除。"FunctionEndFunctionun.onInitMessageBoxMB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2"你确实要完全移除$(^Name),其及所有的组件?"IDYES+2AbortFunctionEndSectionUninstallDelete"$INSTDIR\${PRODUCT_NAME}.url"Delete"$INSTDIR\uninst.exe"Delete"$INSTDIR\setup"Delete"$INSTDIR\License.txt"Delete"$INSTDIR\makensis.exe"Delete"$SMPROGRAMS\${INSTALL_DIR_FILENAME}\Uninstall.lnk"Delete"$SMPROGRAMS\${INSTALL_DIR_FILENAME}\Website.lnk"Delete"$DESKTOP\${INSTALL_DIR_FILENAME}.lnk"Delete"$SMPROGRAMS\${INSTALL_DIR_FILENAME}\${INSTALL_DIR_FILENAME}.lnk"RMDir"$SMPROGRAMS\${INSTALL_DIR_FILENAME}"RMDir"$INSTDIR"DeleteRegKey${PRODUCT_UNINST_ROOT_KEY}"${PRODUCT_UNINST_KEY}"DeleteRegKeyHKLM"${PRODUCT_DIR_REGKEY}"SetAutoClosetrueSectionEnd
以下时EnvVarUpdate.nsh的代码,需要拷贝到NSIS的include路径下面才能用:
/***EnvVarUpdate.nsh*:EnvironmentalVariables:append,prepend,andremoveentries**WARNING:IfyouuseStrFunc.nshheaderthenincludeitbeforethisfile*withallrequireddefinitions.Thisistoavoidconflicts**Usage:*${EnvVarUpdate}"ResultVar""EnvVarName""Action""RegLoc""PathString"**Credits:*Version1.0**CalTurney(turnec2)**AmirSzekely(KiCHiK)ande-circfordevelopingtheforerunnersofthis*function:AddToPath,un.RemoveFromPath,AddToEnvVar,un.RemoveFromEnvVar,*WriteEnvStr,andun.DeleteEnvStr**DiegoPedroso(deguix)forStrTok**KevinEnglish(kenglish_hi)forStrContains**HendriAdriaens(Smile2Me),DiegoPedroso(deguix),andDanFuhry*(dandaman32)forStrReplace**Version1.1(compatibilitywithStrFunc.nsh)**techtonik**http://nsis.sourceforge.net/Environmental_Variables:_append%2C_prepend%2C_and_remove_entries**/!ifndefENVVARUPDATE_FUNCTION!defineENVVARUPDATE_FUNCTION!verbosepush!verbose3!include"LogicLib.nsh"!include"WinMessages.NSH"!include"StrFunc.nsh";----FixforconflictifStrFunc.nshisalreadyincludesinmainfile-----------------------!macro_IncludeStrFunctionStrFuncName!ifndef${StrFuncName}_INCLUDED${${StrFuncName}}!endif!ifndefUn${StrFuncName}_INCLUDED${Un${StrFuncName}}!endif!defineun.${StrFuncName}"${Un${StrFuncName}}"!macroend!insertmacro_IncludeStrFunctionStrTok!insertmacro_IncludeStrFunctionStrStr!insertmacro_IncludeStrFunctionStrRep;----------------------------------MacroDefinitions----------------------------------------!macro_EnvVarUpdateConstructorResultVarEnvVarNameActionReglocPathStringPush"${EnvVarName}"Push"${Action}"Push"${RegLoc}"Push"${PathString}"CallEnvVarUpdatePop"${ResultVar}"!macroend!defineEnvVarUpdate'!insertmacro"_EnvVarUpdateConstructor"'!macro_unEnvVarUpdateConstructorResultVarEnvVarNameActionReglocPathStringPush"${EnvVarName}"Push"${Action}"Push"${RegLoc}"Push"${PathString}"Callun.EnvVarUpdatePop"${ResultVar}"!macroend!defineun.EnvVarUpdate'!insertmacro"_unEnvVarUpdateConstructor"';----------------------------------MacroDefinitionsend-------------------------------------;-----------------------------------EnvVarUpdatestart----------------------------------------!definehklm_all_users'HKLM"SYSTEM\CurrentControlSet\Control\SessionManager\Environment"'!definehkcu_current_user'HKCU"Environment"'!macroEnvVarUpdateUNFunction${UN}EnvVarUpdatePush$0Exch4Exch$1Exch3Exch$2Exch2Exch$3ExchExch$4Push$5Push$6Push$7Push$8Push$9Push$R0/*Afterthispoint:-------------------------$0=ResultVar(returned)$1=EnvVarName(input)$2=Action(input)$3=RegLoc(input)$4=PathString(input)$5=OrigEnvVar(readfromregistry)$6=Lenof$0(temp)$7=tempstr1(temp)$8=Entrycounter(temp)$9=tempstr2(temp)$R0=tempChar(temp)*/;Step1:ReadcontentsofEnvVarNamefromRegLoc;;CheckforemptyEnvVarName${If}$1==""SetErrorsDetailPrint"ERROR:EnvVarNameisblank"GotoEnvVarUpdate_Restore_Vars${EndIf};CheckforvalidAction${If}$2!="A"${AndIf}$2!="P"${AndIf}$2!="R"SetErrorsDetailPrint"ERROR:InvalidAction-mustbeA,P,orR"GotoEnvVarUpdate_Restore_Vars${EndIf}${If}$3==HKLMReadRegStr$5${hklm_all_users}$1;GetEnvVarNamefromallusersinto$5${ElseIf}$3==HKCUReadRegStr$5${hkcu_current_user}$1;ReadEnvVarNamefromcurrentuserinto$5${Else}SetErrorsDetailPrint'ERROR:Actionis[$3]butmustbe"HKLM"orHKCU"'GotoEnvVarUpdate_Restore_Vars${EndIf};CheckforemptyPathString${If}$4==""SetErrorsDetailPrint"ERROR:PathStringisblank"GotoEnvVarUpdate_Restore_Vars${EndIf};Makesurewe'vegotsomeworktodo${If}$5==""${AndIf}$2=="R"SetErrorsDetailPrint"$1isempty-Nothingtoremove"GotoEnvVarUpdate_Restore_Vars${EndIf};Step2:ScrubEnvVar;StrCpy$0$5;Copythecontentsto$0;Removespacesaroundsemicolons(NOTE:spacesbeforethe1stentryor;afterthelastonearenotremovedherebutinsteadinStep3)${If}$0!="";IfEnvVarisnotempty...${Do}${${UN}StrStr}$7$0";"${If}$7==""${ExitDo}${EndIf}${${UN}StrRep}$0$0";"";";Remove'<space>;'${Loop}${Do}${${UN}StrStr}$7$0";"${If}$7==""${ExitDo}${EndIf}${${UN}StrRep}$0$0";"";";Remove';<space>'${Loop}${Do}${${UN}StrStr}$7$0";;"${If}$7==""${ExitDo}${EndIf}${${UN}StrRep}$0$0";;"";"${Loop};RemovealeadingortrailingsemicolonfromEnvVarStrCpy$7$010${If}$7==";"StrCpy$0$0""1;Change';<EnvVar>'to'<EnvVar>'${EndIf}StrLen$6$0IntOp$6$6-1StrCpy$7$01$6${If}$7==";"StrCpy$0$0$6;Change';<EnvVar>'to'<EnvVar>'${EndIf};DetailPrint"Scrubbed$1:[$0]";Uncommenttodebug${EndIf}/*Step3.Removeallinstancesofthetargetpath/string(evenif"A"or"P")$6=boolflag(1=foundandremovedPathString)$7=astring(e.g.path)delimitedbysemicolon(s)$8=entrycounterstartingat0$9=copyof$0$R0=tempChar*/${If}$5!="";IfEnvVarisnotempty...StrCpy$9$0StrCpy$0""StrCpy$80StrCpy$60${Do}${${UN}StrTok}$7$9";"$8"0";$7=nextentry,$8=entrycounter${If}$7=="";Ifwe'verunoutofentries,${ExitDo};weredone${EndIf};;Removeleadingandtrailingspacesfromthisentry(criticalstepforAction=Remove)${Do}StrCpy$R0$71${If}$R0!=""${ExitDo}${EndIf}StrCpy$7$7""1;Removeleadingspace${Loop}${Do}StrCpy$R0$71-1${If}$R0!=""${ExitDo}${EndIf}StrCpy$7$7-1;Removetrailingspace${Loop}${If}$7==$4;Ifstringmatches,removeitbynotappendingitStrCpy$61;Set'found'flag${ElseIf}$7!=$4;IfstringdoesNOTmatch${AndIf}$0=="";andthe1ststringbeingaddedto$0,StrCpy$0$7;copyitto$0withoutaprependedsemicolon${ElseIf}$7!=$4;IfstringdoesNOTmatch${AndIf}$0!="";andthisisNOTthe1ststringtobeaddedto$0,StrCpy$0$0;$7;appendpathto$0withaprependedsemicolon${EndIf};IntOp$8$8+1;Bumpcounter${Loop};Checkforduplicatesuntilwerunoutofpaths${EndIf};Step4:PerformtherequestedAction;${If}$2!="R";IfAppendorPrepend${If}$6==1;AndifwefoundthetargetDetailPrint"目标路径已经在$1中存在.目标路径将被删除并"${EndIf}${If}$0=="";IfEnvVaris(now)emptyStrCpy$0$4;justcopyPathStringtoEnvVar${If}$6==0;Iffoundflagiseither0${OrIf}$6=="";orblank(ifEnvVarNameisempty)DetailPrint"$1wasemptyandhasbeenupdatedwiththetarget"${EndIf}${ElseIf}$2=="A";IfAppend(andEnvVarisnotempty),StrCpy$0$0;$4;appendPathString${If}$6==1DetailPrint"添加到$1末尾"${Else}DetailPrint"路径已经添加到$1"${EndIf}${Else};IfPrepend(andEnvVarisnotempty),StrCpy$0$4;$0;prependPathString${If}$6==1DetailPrint"添加到$1前面"${Else}DetailPrint"路径已经添加到$1"${EndIf}${EndIf}${Else};IfAction=Remove${If}$6==1;andwefoundthetargetDetailPrint"目标路径从$1中删除"${Else}DetailPrint"目标路径不在$1中(不需要删除)"${EndIf}${If}$0==""DetailPrint"$1是空的"${EndIf}${EndIf};Step5:UpdatetheregistryatRegLocwiththeupdatedEnvVarandannouncethechange;ClearErrors${If}$3==HKLMWriteRegExpandStr${hklm_all_users}$1$0;Writeitinalluserssection${ElseIf}$3==HKCUWriteRegExpandStr${hkcu_current_user}$1$0;Writeittocurrentusersection${EndIf}IfErrors0+4MessageBoxMB_OK|MB_ICONEXCLAMATION"Couldnotwriteupdated$1to$3"DetailPrint"Couldnotwriteupdated$1to$3"GotoEnvVarUpdate_Restore_Vars;"Export"ourchangeSendMessage${HWND_BROADCAST}${WM_WININICHANGE}0"STR:Environment"/TIMEOUT=5000EnvVarUpdate_Restore_Vars:;;Restoretheuser'svariablesandreturnResultVarPop$R0Pop$9Pop$8Pop$7Pop$6Pop$5Pop$4Pop$3Pop$2Pop$1Push$0;Pushmy$0(ResultVar)ExchPop$0;Restorehis$0FunctionEnd!macroend;EnvVarUpdateUN!insertmacroEnvVarUpdate""!insertmacroEnvVarUpdate"un.";-----------------------------------EnvVarUpdateend----------------------------------------!verbosepop!endif
References:
http://stackoverflow.com/questions/11272066/nsis-how-to-set-an-environment-variable-in-system-variable
http://nsis.sourceforge.net/Path_Manipulation
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。