温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Qt 5 软件发布===》插件路径

发布时间:2020-07-22 17:36:13 来源:网络 阅读:1163 作者:styyzx 栏目:编程语言

方法有三种,

方法有三种,

  1. qt.conf


2. 放在可执行程序目录下


3. 设置系统变量QT_PLUGIN_PATH ,这里使用的是nsis打包工具,可参考“软件打包NSIS的使用,以及修改环境变量”

QT_PLUGIN_PATH : E:\share\projects\src\bin\plugins ;这里是我的路径,使用时要改成实际的插件路径


以下是NSIS脚本示例代码:

; Script generated by the HM NIS Edit Script Wizard.  !include "StrFunc.nsh" ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "Setup_Wintech" !define PRODUCT_VERSION "2.0" !define PRODUCT_PUBLISHER "Wintech Digital Systems Technology Corp." !define PRODUCT_WEB_SITE "http://www.wintechdigital.com" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\makensis.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" !define INSTALL_DIR_FILENAME "Wintech"   ; MUI 1.67 compatible ------ !include "MUI.nsh" !include "LogicLib.nsh" !include "x64.nsh" !include "EnvVarUpdate.nsh"   ; MUI Settings !define MUI_ABORTWARNING !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\Wintech.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\Wintech.ico"   ; Welcome page !insertmacro MUI_PAGE_WELCOME ; License page ;!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\License.txt" ; Directory page !insertmacro MUI_PAGE_DIRECTORY ; Instfiles page !insertmacro MUI_PAGE_INSTFILES ; Finish page !define MUI_FINISHPAGE_RUN "$INSTDIR\bin\wlp_exe_gui.exe" !insertmacro MUI_PAGE_FINISH   ; Uninstaller pages !insertmacro MUI_UNPAGE_INSTFILES   ; Language files !insertmacro MUI_LANGUAGE "English"   !echo "Testing"   ; MUI end ------   RequestExecutionLevel admin       Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "dlf_setup.exe" InstallDir "$PROGRAMFILES\${INSTALL_DIR_FILENAME}" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show   Section "MainSection" SEC01     ${EnvVarUpdate} $0 "PATH" "A" "HKLM" "$INSTDIR\bin" ; appends to the system path   SetOutPath "$INSTDIR"   SetOverwrite ifnewer   File "${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\*"    ;Detect windows is 32bit or 64bit      ${If} ${RunningX64} ; 64bit bits go here   Exec '"$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} ; 32bit bits go here    Exec '"$INSTDIR\bin\driver\win7\Psexec.exe"  -i  -d  -s  "$INSTDIR\bin\driver\win7\install_wdf_driver.exe"'   ExecWait '"$INSTDIR\bin\vs2010sp1vcredist.exe"' ${EndIf}          SectionEnd   Section -AdditionalIcons   WriteIniStr "$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" SectionEnd   Section -Post   WriteUninstaller "$INSTDIR\uninst.exe"   WriteRegStr HKLM "${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}" SectionEnd     Function un.onUninstSuccess   HideWindow   MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从你的计算机移除。" FunctionEnd   Function un.onInit   MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,其及所有的组件?" IDYES +2   Abort FunctionEnd   Section Uninstall   Delete "$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}"   DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"   SetAutoClose true SectionEnd


以下时EnvVarUpdate.nsh的代码,需要拷贝到NSIS的include路径下面才能用:

/**  *  EnvVarUpdate.nsh  *    : Environmental Variables: append, prepend, and remove entries  *  *     WARNING: If you use StrFunc.nsh header then include it before this file  *              with all required definitions. This is to avoid conflicts  *  *  Usage:  *    ${EnvVarUpdate} "ResultVar" "EnvVarName" "Action" "RegLoc" "PathString"  *  *  Credits:  *  Version 1.0  *  * Cal Turney (turnec2)  *  * Amir Szekely (KiCHiK) and e-circ for developing the forerunners of this  *    function: AddToPath, un.RemoveFromPath, AddToEnvVar, un.RemoveFromEnvVar,  *    WriteEnvStr, and un.DeleteEnvStr  *  * Diego Pedroso (deguix) for StrTok  *  * Kevin English (kenglish_hi) for StrContains  *  * Hendri Adriaens (Smile2Me), Diego Pedroso (deguix), and Dan Fuhry  *    (dandaman32) for StrReplace  *  *  Version 1.1 (compatibility with StrFunc.nsh)  *  * techtonik  *  *  http://nsis.sourceforge.net/Environmental_Variables:_append%2C_prepend%2C_and_remove_entries  *  */ !ifndef ENVVARUPDATE_FUNCTION !define ENVVARUPDATE_FUNCTION !verbose push !verbose 3 !include "LogicLib.nsh" !include "WinMessages.NSH" !include "StrFunc.nsh" ; ---- Fix for conflict if StrFunc.nsh is already includes in main file ----------------------- !macro _IncludeStrFunction StrFuncName   !ifndef ${StrFuncName}_INCLUDED     ${${StrFuncName}}   !endif   !ifndef Un${StrFuncName}_INCLUDED     ${Un${StrFuncName}}   !endif   !define un.${StrFuncName} "${Un${StrFuncName}}" !macroend !insertmacro _IncludeStrFunction StrTok !insertmacro _IncludeStrFunction StrStr !insertmacro _IncludeStrFunction StrRep ; ---------------------------------- Macro Definitions ---------------------------------------- !macro _EnvVarUpdateConstructor ResultVar EnvVarName Action Regloc PathString   Push "${EnvVarName}"   Push "${Action}"   Push "${RegLoc}"   Push "${PathString}"     Call EnvVarUpdate   Pop "${ResultVar}" !macroend !define EnvVarUpdate '!insertmacro "_EnvVarUpdateConstructor"' !macro _unEnvVarUpdateConstructor ResultVar EnvVarName Action Regloc PathString   Push "${EnvVarName}"   Push "${Action}"   Push "${RegLoc}"   Push "${PathString}"     Call un.EnvVarUpdate   Pop "${ResultVar}" !macroend !define un.EnvVarUpdate '!insertmacro "_unEnvVarUpdateConstructor"' ; ---------------------------------- Macro Definitions end------------------------------------- ;----------------------------------- EnvVarUpdate start---------------------------------------- !define hklm_all_users     'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' !define hkcu_current_user  'HKCU "Environment"' !macro EnvVarUpdate UN Function ${UN}EnvVarUpdate   Push $0   Exch 4   Exch $1   Exch 3   Exch $2   Exch 2   Exch $3   Exch   Exch $4   Push $5   Push $6   Push $7   Push $8   Push $9   Push $R0   /* After this point:   -------------------------      $0 = ResultVar     (returned)      $1 = EnvVarName    (input)      $2 = Action        (input)      $3 = RegLoc        (input)      $4 = PathString    (input)      $5 = Orig EnvVar   (read from registry)      $6 = Len of $0     (temp)      $7 = tempstr1      (temp)      $8 = Entry counter (temp)      $9 = tempstr2      (temp)      $R0 = tempChar     (temp)  */   ; Step 1:  Read contents of EnvVarName from RegLoc   ;   ; Check for empty EnvVarName   ${If} $1 == ""     SetErrors     DetailPrint "ERROR: EnvVarName is blank"     Goto EnvVarUpdate_Restore_Vars   ${EndIf}   ; Check for valid Action   ${If}    $2 != "A"   ${AndIf} $2 != "P"   ${AndIf} $2 != "R"     SetErrors     DetailPrint "ERROR: Invalid Action - must be A, P, or R"     Goto EnvVarUpdate_Restore_Vars   ${EndIf}   ${If} $3 == HKLM     ReadRegStr $5 ${hklm_all_users} $1     ; Get EnvVarName from all users into $5   ${ElseIf} $3 == HKCU     ReadRegStr $5 ${hkcu_current_user} $1  ; Read EnvVarName from current user into $5   ${Else}     SetErrors     DetailPrint 'ERROR: Action is [$3] but must be "HKLM" or HKCU"'     Goto EnvVarUpdate_Restore_Vars   ${EndIf}   ; Check for empty PathString   ${If} $4 == ""     SetErrors     DetailPrint "ERROR: PathString is blank"     Goto EnvVarUpdate_Restore_Vars   ${EndIf}   ; Make sure we've got some work to do   ${If} $5 == ""   ${AndIf} $2 == "R"     SetErrors     DetailPrint "$1 is empty - Nothing to remove"     Goto EnvVarUpdate_Restore_Vars   ${EndIf}   ; Step 2: Scrub EnvVar   ;   StrCpy $0 $5                             ; Copy the contents to $0   ; Remove spaces around semicolons (NOTE: spaces before the 1st entry or   ; after the last one are not removed here but instead in Step 3)   ${If} $0 != ""                           ; If EnvVar is not empty ...     ${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}     ; Remove a leading or trailing semicolon from EnvVar     StrCpy  $7  $0 1 0     ${If} $7 == ";"       StrCpy $0  $0 "" 1                   ; Change ';<EnvVar>' to '<EnvVar>'     ${EndIf}     StrLen $6 $0     IntOp $6 $6 - 1     StrCpy $7  $0 1 $6     ${If} $7 == ";"      StrCpy $0  $0 $6                      ; Change ';<EnvVar>' to '<EnvVar>'     ${EndIf}     ; DetailPrint "Scrubbed $1: [$0]"      ; Uncomment to debug   ${EndIf}   /* Step 3. Remove all instances of the target path/string (even if "A" or "P")      $6 = bool flag (1 = found and removed PathString)      $7 = a string (e.g. path) delimited by semicolon(s)      $8 = entry counter starting at 0      $9 = copy of $0      $R0 = tempChar      */   ${If} $5 != ""                           ; If EnvVar is not empty ...     StrCpy $9 $0     StrCpy $0 ""     StrCpy $8 0     StrCpy $6 0     ${Do}       ${${UN}StrTok} $7 $9 ";" $8 "0"      ; $7 = next entry, $8 = entry counter       ${If} $7 == ""                       ; If we've run out of entries,         ${ExitDo}                          ;    were done       ${EndIf}                             ;       ; Remove leading and trailing spaces from this entry (critical step for Action=Remove)       ${Do}         StrCpy $R0  $7 1         ${If} $R0 != " "           ${ExitDo}         ${EndIf}         StrCpy $7   $7 "" 1                ;  Remove leading space       ${Loop}       ${Do}         StrCpy $R0  $7 1 -1         ${If} $R0 != " "           ${ExitDo}         ${EndIf}         StrCpy $7   $7 -1                  ;  Remove trailing space       ${Loop}       ${If} $7 == $4                       ; If string matches, remove it by not appending it         StrCpy $6 1                        ; Set 'found' flag       ${ElseIf} $7 != $4                   ; If string does NOT match       ${AndIf}  $0 == ""                   ;    and the 1st string being added to $0,         StrCpy $0 $7                       ;    copy it to $0 without a prepended semicolon       ${ElseIf} $7 != $4                   ; If string does NOT match       ${AndIf}  $0 != ""                   ;    and this is NOT the 1st string to be added to $0,         StrCpy $0 $0;$7                    ;    append path to $0 with a prepended semicolon       ${EndIf}                             ;       IntOp $8 $8 + 1                      ; Bump counter     ${Loop}                                ; Check for duplicates until we run out of paths   ${EndIf}   ; Step 4:  Perform the requested Action   ;   ${If} $2 != "R"                          ; If Append or Prepend     ${If} $6 == 1                          ; And if we found the target       DetailPrint "目标路径已经在$1中存在. 目标路径将被删除并"     ${EndIf}     ${If} $0 == ""                         ; If EnvVar is (now) empty       StrCpy $0 $4                         ;   just copy PathString to EnvVar       ${If} $6 == 0                        ; If found flag is either 0       ${OrIf} $6 == ""                     ; or blank (if EnvVarName is empty)         DetailPrint "$1 was empty and has been updated with the target"       ${EndIf}     ${ElseIf} $2 == "A"                    ;  If Append (and EnvVar is not empty),       StrCpy $0 $0;$4                      ;     append PathString       ${If} $6 == 1         DetailPrint "添加到 $1末尾"       ${Else}         DetailPrint "路径已经添加到 $1"       ${EndIf}     ${Else}                                ;  If Prepend (and EnvVar is not empty),       StrCpy $0 $4;$0                      ;     prepend PathString       ${If} $6 == 1         DetailPrint "添加到 $1前面"       ${Else}         DetailPrint "路径已经添加到 $1"       ${EndIf}     ${EndIf}   ${Else}                                  ; If Action = Remove     ${If} $6 == 1                          ;   and we found the target       DetailPrint "目标路径从 $1中删除"     ${Else}       DetailPrint "目标路径不在 $1中 (不需要删除)"     ${EndIf}     ${If} $0 == ""       DetailPrint "$1 是空的"     ${EndIf}   ${EndIf}   ; Step 5:  Update the registry at RegLoc with the updated EnvVar and announce the change   ;   ClearErrors   ${If} $3  == HKLM     WriteRegExpandStr ${hklm_all_users} $1 $0     ; Write it in all users section   ${ElseIf} $3 == HKCU     WriteRegExpandStr ${hkcu_current_user} $1 $0  ; Write it to current user section   ${EndIf}   IfErrors 0 +4     MessageBox MB_OK|MB_ICONEXCLAMATION "Could not write updated $1 to $3"     DetailPrint "Could not write updated $1 to $3"     Goto EnvVarUpdate_Restore_Vars   ; "Export" our change   SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000   EnvVarUpdate_Restore_Vars:   ;   ; Restore the user's variables and return ResultVar   Pop $R0   Pop $9   Pop $8   Pop $7   Pop $6   Pop $5   Pop $4   Pop $3   Pop $2   Pop $1   Push $0  ; Push my $0 (ResultVar)   Exch   Pop $0   ; Restore his $0 FunctionEnd !macroend   ; EnvVarUpdate UN !insertmacro EnvVarUpdate "" !insertmacro EnvVarUpdate "un." ;----------------------------------- EnvVarUpdate end---------------------------------------- !verbose pop !endif


 References:

http://stackoverflow.com/questions/11272066/nsis-how-to-set-an-environment-variable-in-system-variable

http://nsis.sourceforge.net/Path_Manipulation




向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI