OpenSUSE

更换源

zypper addrepo -f http://ftp.sjtu.edu.cn/opensuse/update/13.2/  openSUSE-13.2-Update-Oss
zypper addrepo -f http://ftp.sjtu.edu.cn/opensuse/update/13.2-non-oss/ openSUSE-13.2-Update-Non-Oss
zypper addrepo -f http://ftp.sjtu.edu.cn/opensuse/distribution/13.2/repo/oss/ openSUSE-13.2-Oss
zypper addrepo -f http://ftp.sjtu.edu.cn/opensuse/distribution/13.2/repo/non-oss/  openSUSE-13.2-Non-Oss

加入owncloud

zypper addrepo http://download.opensuse.org/repositories/isv:ownCloud:desktop/openSUSE_13.2/isv:ownCloud:desktop.repo
zypper refresh
zypper install owncloud-client

安装libopenssl

zypper install mingw32-libopenssl-devel

添加NSIS2.5版本

- 先删除原先的repo
zypper addrepo http://download.opensuse.org/repositories/windows:mingw:win32/SLE_12/windows:mingw:win32.repo
zypper refresh
zypper install mingw32-cross-nsis  mingw32-cross-nsis-plugin-nsprocess mingw32-cross-nsis-plugin-uac

下载OCUtils.dll

cd vStorSync20
mkdir binary
cd binary
git clone https://github.com/owncloud/owncloud-client-binary.git
mv owncloud-client-binary/shell_integration .

修改NSIS.template

vim cmake/modules/NSIS.template.in



;ownCloud installer script.

!define APPLICATION_SHORTNAME "@APPLICATION_EXECUTABLE@"
!define APPLICATION_NAME "@APPLICATION_NAME@"
!define APPLICATION_VENDOR "@APPLICATION_VENDOR@"
!define APPLICATION_EXECUTABLE "@APPLICATION_EXECUTABLE@.exe"
!define APPLICATION_CMD_EXECUTABLE "@APPLICATION_EXECUTABLE@cmd.exe"
!define APPLICATION_DOMAIN "@APPLICATION_DOMAIN@"
!define APPLICATION_LICENSE "@APPLICATION_LICENSE@"
!define WIN_SETUP_BITMAP_PATH "@WIN_SETUP_BITMAP_PATH@"

!define CRASHREPORTER_EXECUTABLE "@CRASHREPORTER_EXECUTABLE@"

;-----------------------------------------------------------------------------
; Some installer script options (comment-out options not required)
;-----------------------------------------------------------------------------
!if "@APPLICATION_LICENSE@" != ""
  !define OPTION_LICENSE_AGREEMENT
!endif
!define OPTION_UAC_PLUGIN_ENHANCED
!define OPTION_SECTION_SC_SHELL_EXT
!define OPTION_SECTION_SC_START_MENU
!define OPTION_SECTION_SC_DESKTOP
!define OPTION_SECTION_SC_QUICK_LAUNCH
!define OPTION_FINISHPAGE
!define OPTION_FINISHPAGE_LAUNCHER
; !define OPTION_FINISHPAGE_RELEASE_NOTES

;-----------------------------------------------------------------------------
; Some paths.
;-----------------------------------------------------------------------------
!ifndef MING_PATH
    !define MING_PATH "/usr/i686-w64-mingw32/sys-root/mingw"
!endif
!define MING_BIN "${MING_PATH}/bin"
!define MING_LIB "${MING_PATH}/lib"
!define MING_SHARE "${MING_PATH}/share"
!define BUILD_PATH "@CMAKE_BINARY_DIR@"
!define SOURCE_PATH "@CMAKE_SOURCE_DIR@"
!define QT_DLL_PATH "${MING_BIN}"
!define ACCESSIBLE_DLL_PATH "${MING_LIB}/qt5/plugins/accessible"
!define SQLITE_DLL_PATH "${MING_LIB}/qt5/plugins/sqldrivers"
!define IMAGEFORMATS_DLL_PATH "${MING_LIB}/qt5/plugins/imageformats"
!define PLATFORMS_DLL_PATH "${MING_LIB}/qt5/plugins/platforms"

!define CSYNC_LIBRARY_DIR "@CSYNC_LIBRARY_DIR@"
!define CSYNC_CONFIG_DIR "@CSYNC_CONFIG_DIR@"

!define NSI_PATH "${source_path}/admin/win/nsi"

;-----------------------------------------------------------------------------
; Installer version
;-----------------------------------------------------------------------------

!define VER_MAJOR "@CPACK_PACKAGE_VERSION_MAJOR@"
!define VER_MINOR "@CPACK_PACKAGE_VERSION_MINOR@"
!define VER_PATCH "@CPACK_PACKAGE_VERSION_PATCH@"
!define VER_BUILD "@CPACK_PACKAGE_VERSION_BUILD@"
!define VERSION "@CPACK_PACKAGE_VERSION@"

Var InstallRunIfSilent
Var NoAutomaticUpdates

;-----------------------------------------------------------------------------
; Installer build timestamp.
;-----------------------------------------------------------------------------
!define /date BUILD_TIME "built on %Y/%m/%d at %I:%M %p"

;-----------------------------------------------------------------------------
; Initial installer setup and definitions.
;-----------------------------------------------------------------------------
Name "@CPACK_NSIS_PACKAGE_NAME@"
BrandingText "${APPLICATION_NAME} ${VERSION}  -- ${BUILD_TIME}"
OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@"
InstallDir "$PROGRAMFILES\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
InstallDirRegKey HKCU "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" ""
InstType Standard
InstType Full
InstType Minimal
CRCCheck On
SetCompressor @CPACK_NSIS_COMPRESSOR@
RequestExecutionLevel user ;Now using the UAC plugin.
ReserveFile NSIS.InstallOptions.ini
ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"

@CPACK_NSIS_SECTION_SELECTED_VARS@

;-----------------------------------------------------------------------------
; Include some required header files.
;-----------------------------------------------------------------------------
!include LogicLib.nsh ;Used by APPDATA uninstaller.
!include MUI2.nsh ;Used by APPDATA uninstaller.
!include InstallOptions.nsh ;Required by MUI2 to support old MUI_INSTALLOPTIONS.
!include Memento.nsh ;Remember user selections.
!include WinVer.nsh ;Windows version detection.
!include WordFunc.nsh  ;Used by VersionCompare macro function.
!include FileFunc.nsh  ;Used to read out parameters
!include UAC.nsh ;Used by the UAC elevation to install as user or admin.
!include nsProcess.nsh ;Used to kill the running process
!include Library.nsh ;Used by the COM registration for shell extensions
!include x64.nsh ;Used to determine the right arch for the shell extensions

;-----------------------------------------------------------------------------
; Memento selections stored in registry.
;-----------------------------------------------------------------------------
!define MEMENTO_REGISTRY_ROOT HKLM
!define MEMENTO_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}"

;-----------------------------------------------------------------------------
; Modern User Interface (MUI) defintions and setup.
;-----------------------------------------------------------------------------
!define MUI_ABORTWARNING
!define MUI_ICON ${NSI_PATH}\installer.ico
!define MUI_UNICON ${NSI_PATH}\installer.ico
!define MUI_WELCOMEFINISHPAGE_BITMAP ${WIN_SETUP_BITMAP_PATH}/welcome.bmp
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP  ${WIN_SETUP_BITMAP_PATH}/page_header.bmp
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_FINISHPAGE_LINK "${APPLICATION_DOMAIN}"
!define MUI_FINISHPAGE_LINK_LOCATION "http://${APPLICATION_DOMAIN}"
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
!ifdef OPTION_FINISHPAGE_RELEASE_NOTES
   !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
   !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\NOTES.txt"
   !define MUI_FINISHPAGE_SHOWREADME_TEXT $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING
!endif
!ifdef OPTION_FINISHPAGE_LAUNCHER
   !define MUI_FINISHPAGE_NOAUTOCLOSE
   !define MUI_FINISHPAGE_RUN
   !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchApplication"
!endif

;-----------------------------------------------------------------------------
; Page macros.
;-----------------------------------------------------------------------------
!insertmacro MUI_PAGE_WELCOME
!ifdef OPTION_LICENSE_AGREEMENT
   !insertmacro MUI_PAGE_LICENSE "${APPLICATION_LICENSE}"
!endif
Page custom PageReinstall PageLeaveReinstall
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!ifdef OPTION_FINISHPAGE
   !insertmacro MUI_PAGE_FINISH
!endif
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES

;-----------------------------------------------------------------------------
; Other MUI macros.
;-----------------------------------------------------------------------------
!insertmacro MUI_LANGUAGE "English"

!include ${source_path}/admin/win/nsi/l10n/languages.nsh
!include ${source_path}/admin/win/nsi/l10n/declarations.nsh

; Set version strings with english locale
VIProductVersion "${VERSION}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${APPLICATION_NAME}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "${APPLICATION_VENDOR}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${VERSION}"

!macro SETLANG un
   Function ${un}SetLang
      # load the selected language file
      !include "${source_path}/admin/win/nsi/l10n\English.nsh"
      StrCmp $LANGUAGE ${LANG_GERMAN} German 0
      StrCmp $LANGUAGE ${LANG_DUTCH} Dutch 0
      StrCmp $LANGUAGE ${LANG_FINNISH} Finnish 0
      StrCmp $LANGUAGE ${LANG_JAPANESE} Japanese 0
      StrCmp $LANGUAGE ${LANG_SLOVENIAN} Slovenian 0
      StrCmp $LANGUAGE ${LANG_SPANISH} Spanish 0
      StrCmp $LANGUAGE ${LANG_ITALIAN} Italian 0
      StrCmp $LANGUAGE ${LANG_ESTONIAN} Estonian 0
      StrCmp $LANGUAGE ${LANG_GREEK} Greek 0
      StrCmp $LANGUAGE ${LANG_BASQUE} Basque 0
      StrCmp $LANGUAGE ${LANG_GALICIAN} Galician 0
      StrCmp $LANGUAGE ${LANG_POLISH} Polish 0
      StrCmp $LANGUAGE ${LANG_TURKISH} Turkish 0
      StrCmp $LANGUAGE ${LANG_NORWEGIAN} Norwegian 0
      StrCmp $LANGUAGE ${LANG_PORTUGUESEBR} Brazilian EndLanguageCmp
      German:
      !include "${source_path}/admin/win/nsi/l10n\German.nsh"
      Goto EndLanguageCmp
      Dutch:
      !include "${source_path}/admin/win/nsi/l10n\Dutch.nsh"
      Goto EndLanguageCmp
      Finnish:
      !include "${source_path}/admin/win/nsi/l10n\Finnish.nsh"
      Goto EndLanguageCmp
      Japanese:
      !include "${source_path}/admin/win/nsi/l10n\Japanese.nsh"
      Goto EndLanguageCmp
      Slovenian:
      !include "${source_path}/admin/win/nsi/l10n\Slovenian.nsh"
      Goto EndLanguageCmp
      Spanish:
      !include "${source_path}/admin/win/nsi/l10n\Spanish.nsh"
      Goto EndLanguageCmp
      Italian:
      !include "${source_path}/admin/win/nsi/l10n\Italian.nsh"
      Goto EndLanguageCmp
      Estonian:
      !include "${source_path}/admin/win/nsi/l10n\Estonian.nsh"
      Goto EndLanguageCmp
      Greek:
      !include "${source_path}/admin/win/nsi/l10n\Greek.nsh"
      Goto EndLanguageCmp
      Basque:
      !include "${source_path}/admin/win/nsi/l10n\Basque.nsh"
      Goto EndLanguageCmp
      Galician:
      !include "${source_path}/admin/win/nsi/l10n\Galician.nsh"
      Goto EndLanguageCmp
      Polish:
      !include "${source_path}/admin/win/nsi/l10n\Polish.nsh"
      Goto EndLanguageCmp
      Turkish:
      !include "${source_path}/admin/win/nsi/l10n\Turkish.nsh"
      Goto EndLanguageCmp
      Brazilian:
      !include "${source_path}/admin/win/nsi/l10n\PortugueseBR.nsh"
      Goto EndLanguageCmp
      Norwegian:
      !include "${source_path}/admin/win/nsi/l10n\Norwegian.nsh"
      EndLanguageCmp:

   FunctionEnd
!macroend

!insertmacro SETLANG ""
!insertmacro SETLANG "un."

; Usage: ${If} ${HasSection} SectionName
!macro _HasSection _a _b _t _f
   ReadRegDWORD $_LOGICLIB_TEMP "${MEMENTO_REGISTRY_ROOT}" "${MEMENTO_REGISTRY_KEY}" "MementoSection_${_b}"
   IntCmpU $_LOGICLIB_TEMP 0 ${_f} ${_t}
!macroend
!define HasSection `"" HasSection`

##############################################################################
#                                                                            #
#   FINISH PAGE LAUNCHER FUNCTIONS                                           #
#                                                                            #
##############################################################################

Function LaunchApplication
   !insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\${APPLICATION_EXECUTABLE}" "" "" ""
FunctionEnd

##############################################################################
#                                                                            #
#   PROCESS HANDLING FUNCTIONS AND MACROS                                    #
#                                                                            #
##############################################################################

!macro CheckForProcess processName gotoWhenFound gotoWhenNotFound
   ${nsProcess::FindProcess} ${processName} $R0
   StrCmp $R0 0 ${gotoWhenFound} ${gotoWhenNotFound}
!macroend

!macro ConfirmEndProcess processName
   MessageBox MB_YESNO|MB_ICONEXCLAMATION \
     $ConfirmEndProcess_MESSAGEBOX_TEXT \
     /SD IDYES IDYES process_${processName}_kill IDNO process_${processName}_ended
   process_${processName}_kill:
      DetailPrint $ConfirmEndProcess_KILLING_PROCESSES_TEXT
      ${nsProcess::KillProcess} ${processName} $R0
      Sleep 1500
      StrCmp $R0 "1" process_${processName}_ended
      DetailPrint $ConfirmEndProcess_KILL_NOT_FOUND_TEXT
   process_${processName}_ended:
!macroend

!macro CheckAndConfirmEndProcess processName
   !insertmacro CheckForProcess ${processName} 0 no_process_${processName}_to_end
   !insertmacro ConfirmEndProcess ${processName}
   no_process_${processName}_to_end:
!macroend

Function EnsureOwncloudShutdown
   !insertmacro CheckAndConfirmEndProcess "${APPLICATION_EXECUTABLE}"
FunctionEnd

Function InstallRedistributables
   ${If} ${RunningX64}
      ExecWait '"$OUTDIR\vcredist_x64.exe" /install /quiet'
   ${Else}
      ExecWait '"$OUTDIR\vcredist_x86.exe" /install /quiet'
   ${EndIf}
   Delete "$OUTDIR\vcredist_x86.exe"
   Delete "$OUTDIR\vcredist_x64.exe"
FunctionEnd

##############################################################################
#                                                                            #
#   RE-INSTALLER FUNCTIONS                                                   #
#                                                                            #
##############################################################################

Function PageReinstall
   ReadRegStr $R0 HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" ""
   StrCmp $R0 "" 0 +2
   Abort

   ;Detect version
   ReadRegDWORD $R0 HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMajor"
   IntCmp $R0 ${VER_MAJOR} minor_check new_version older_version
   minor_check:
      ReadRegDWORD $R0 HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMinor"
      IntCmp $R0 ${VER_MINOR} rev_check new_version older_version
   rev_check:
      ReadRegDWORD $R0 HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionRevision"
      IntCmp $R0 ${VER_PATCH} build_check new_version older_version
   build_check:
      ReadRegDWORD $R0 HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionBuild"
      IntCmp $R0 ${VER_BUILD} same_version new_version older_version

   new_version:
      !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 1" "Text" $PageReinstall_NEW_Field_1
      !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 2" "Text" $PageReinstall_NEW_Field_2
      !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 3" "Text" $PageReinstall_NEW_Field_3
      !insertmacro MUI_HEADER_TEXT $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE
      StrCpy $R0 "1"
      Goto reinst_start

   older_version:
      !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 1" "Text" $PageReinstall_OLD_Field_1
      !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 2" "Text" $PageReinstall_NEW_Field_2
      !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 3" "Text" $PageReinstall_NEW_Field_3
      !insertmacro MUI_HEADER_TEXT $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE
      StrCpy $R0 "1"
      Goto reinst_start

   same_version:
      !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 1" "Text" $PageReinstall_SAME_Field_1
      !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 2" "Text" $PageReinstall_SAME_Field_2
      !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 3" "Text" $PageReinstall_SAME_Field_3
      !insertmacro MUI_HEADER_TEXT $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE
      StrCpy $R0 "2"

   reinst_start:
      !insertmacro INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini"
FunctionEnd

Function PageLeaveReinstall
   !insertmacro INSTALLOPTIONS_READ $R1 "NSIS.InstallOptions.ini" "Field 2" "State"
   StrCmp $R0 "1" 0 +2
   StrCmp $R1 "1" reinst_uninstall reinst_done
   StrCmp $R0 "2" 0 +3
   StrCmp $R1 "1" reinst_done reinst_uninstall
   reinst_uninstall:
      ReadRegStr $R1 ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "UninstallString"
      HideWindow
      ClearErrors
      ExecWait '$R1 _?=$INSTDIR'
      IfErrors no_remove_uninstaller
      IfFileExists "$INSTDIR\${APPLICATION_EXECUTABLE}" no_remove_uninstaller
      Delete $R1
      RMDir $INSTDIR
   no_remove_uninstaller:
      StrCmp $R0 "2" 0 +3
      Quit
      BringToFront
   reinst_done:
FunctionEnd

##############################################################################
#                                                                            #
#   INSTALLER SECTIONS                                                       #
#                                                                            #
##############################################################################
Section "${APPLICATION_NAME}" SEC_APPLICATION
   SectionIn 1 2 3 RO
   SetDetailsPrint listonly

   SetDetailsPrint textonly
   DetailPrint $SEC_APPLICATION_DETAILS
   SetDetailsPrint listonly
   SetOutPath "$INSTDIR"

   ;Main executable & csync
   File "${BUILD_PATH}\bin\${APPLICATION_EXECUTABLE}"
   File "${BUILD_PATH}\bin\${APPLICATION_CMD_EXECUTABLE}"
   File "${BUILD_PATH}\bin\lib${APPLICATION_SHORTNAME}sync.dll"
   File "${BUILD_PATH}\bin\libocsync.dll"

   File "${BUILD_PATH}\src\gui\client*.qm"
   ; Make sure only to copy qt, not qt_help, etc
   File "${MING_SHARE}\qt5\translations\qt_??.qm"
   File "${MING_SHARE}\qt5\translations\qt_??_??.qm"
   File "${MING_SHARE}\qt5\translations\qtbase_*.qm"
   File "${MING_SHARE}\qt5\translations\qtkeychain_*.qm"

   ;Add crash reporter if it was built
   File /nonfatal "${BUILD_PATH}/bin/${CRASHREPORTER_EXECUTABLE}.exe"

   SetOutPath "$INSTDIR\platforms"
   File "${PLATFORMS_DLL_PATH}\qwindows.dll"
   SetOutPath "$INSTDIR\imageformats"
   File "${IMAGEFORMATS_DLL_PATH}\qgif.dll"
   File "${IMAGEFORMATS_DLL_PATH}\qjpeg.dll"
   File "${IMAGEFORMATS_DLL_PATH}\qico.dll"

   SetOutPath "$INSTDIR\sqldrivers"
   File "${SQLITE_DLL_PATH}\qsqlite.dll"

   SetOutPath "$INSTDIR"
   ;License & release notes.
   File "@CPACK_RESOURCE_FILE_LICENSE@"
   ;File /oname=NOTES.txt ${NSI_PATH}\RELEASE_NOTES.txt

   ;Qt stuff:
   File "${QT_DLL_PATH}\Qt5Core.dll"
   File "${QT_DLL_PATH}\Qt5Gui.dll"
   File "${QT_DLL_PATH}\Qt5Network.dll"
   File "${QT_DLL_PATH}\Qt5OpenGL.dll"
   File "${QT_DLL_PATH}\Qt5PrintSupport.dll"
   File "${QT_DLL_PATH}\Qt5Qml.dll"
   File "${QT_DLL_PATH}\Qt5Quick.dll"
   File "${QT_DLL_PATH}\Qt5Sql.dll"
   File "${QT_DLL_PATH}\Qt5WebKit.dll"
   File "${QT_DLL_PATH}\Qt5WebKitWidgets.dll"
   File "${QT_DLL_PATH}\Qt5Widgets.dll"
   File "${QT_DLL_PATH}\Qt5Xml.dll"

   ;QtWebKit dependencies
   File "${QT_DLL_PATH}\Qt5Multimedia.dll"
   File "${QT_DLL_PATH}\Qt5MultimediaWidgets.dll"
   File "${QT_DLL_PATH}\Qt5Sensors.dll"

   ;Qt deps
   ;File "${MING_BIN}\libpng16-16.dll"
   ;File "${MING_BIN}\icudata53.dll"
   ;File "${MING_BIN}\icui18n53.dll"
   ;File "${MING_BIN}\icuuc53.dll"
   ;File "${MING_BIN}\libEGL.dll"
   ;File "${MING_BIN}\libGLESv2.dll"
   ;File "${MING_BIN}\libjpeg-8.dll"
   ;File "${MING_BIN}\libpcre16-0.dll"
   ;File "${MING_BIN}\libsqlite3-0.dll"
   ;File "${MING_BIN}\libcrypto-10.dll"
   ;File "${MING_BIN}\libssl-10.dll"
   ;File "${MING_BIN}\libstdc++-6.dll"
   ;File "${MING_BIN}\libwebp-4.dll"
   ;File "${MING_BIN}\libxslt-1.dll"
   ;File "${MING_BIN}\libxml2-2.dll"
   ;File "${MING_BIN}\zlib1.dll"
   ;File "${MING_BIN}\libsqlite3-0.dll"
   File "${MING_BIN}\*.dll"

   ;QtKeyChain stuff
   File "${MING_BIN}\libqt5keychain.dll"

   ;MinGW stuff
   File "${MING_BIN}\libgcc_s_sjlj-1.dll"
   File "${MING_BIN}\libstdc++-6.dll"
   File "${MING_BIN}\libwinpthread-1.dll"

   ;CSync configs
   File "${SOURCE_PATH}/sync-exclude.lst"

SectionEnd

!ifdef OPTION_SECTION_SC_SHELL_EXT
   ${MementoSection} $OPTION_SECTION_SC_SHELL_EXT_SECTION SEC_SHELL_EXT
      SectionIn 1 2
      SetDetailsPrint textonly
      DetailPrint $OPTION_SECTION_SC_SHELL_EXT_DetailPrint
      File "${BUILD_PATH}\vcredist_x86.exe"
      File "${BUILD_PATH}\vcredist_x64.exe"
      Call InstallRedistributables
      CreateDirectory "$INSTDIR\shellext"
      !define LIBRARY_COM
      !define LIBRARY_SHELL_EXTENSION
      !define LIBRARY_IGNORE_VERSION
      ${If} ${RunningX64}
         !define LIBRARY_X64
         !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "${SOURCE_PATH}\binary\shell_integration\windows\Release\x64\OCUtil_x64.dll" "$INSTDIR\shellext\OCUtil_x64.dll" "$INSTDIR\shellext"
         !insertmacro InstallLib REGDLL NOTSHARED REBOOT_PROTECTED "${SOURCE_PATH}\binary\shell_integration\windows\Release\x64\OCOverlays_x64.dll" "$INSTDIR\shellext\OCOverlays_x64.dll" "$INSTDIR\shellext"
         !insertmacro InstallLib REGDLL NOTSHARED REBOOT_PROTECTED "${SOURCE_PATH}\binary\shell_integration\windows\Release\x64\OCContextMenu_x64.dll" "$INSTDIR\shellext\OCContextMenu_x64.dll" "$INSTDIR\shellext"
         !undef LIBRARY_X64
     ${Else}
         !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "${SOURCE_PATH}\binary\shell_integration\windows\Release\Win32\OCUtil_x86.dll" "$INSTDIR\shellext\OCUtil_x86.dll" "$INSTDIR\shellext"
         !insertmacro InstallLib REGDLL NOTSHARED REBOOT_PROTECTED "${SOURCE_PATH}\binary\shell_integration\windows\Release\Win32\OCOverlays_x86.dll" "$INSTDIR\shellext\OCOverlays_x86.dll" "$INSTDIR\shellext"
         !insertmacro InstallLib REGDLL NOTSHARED REBOOT_PROTECTED "${SOURCE_PATH}\binary\shell_integration\windows\Release\Win32\OCContextMenu_x86.dll" "$INSTDIR\shellext\OCContextMenu_x86.dll" "$INSTDIR\shellext"
      ${Endif}
      !undef LIBRARY_COM
      !undef LIBRARY_SHELL_EXTENSION
      !undef LIBRARY_IGNORE_VERSION
   ${MementoSectionEnd}
!endif

SectionGroup $SectionGroup_Shortcuts

!ifdef OPTION_SECTION_SC_START_MENU
   ${MementoSection} $OPTION_SECTION_SC_START_MENU_SECTION SEC_START_MENU
      SectionIn 1 2 3
      SetDetailsPrint textonly
      DetailPrint $OPTION_SECTION_SC_START_MENU_DetailPrint
      SetDetailsPrint listonly
      SetShellVarContext all
      CreateShortCut "$SMPROGRAMS\${APPLICATION_NAME}.lnk" "$INSTDIR\${APPLICATION_EXECUTABLE}"
      SetShellVarContext current
   ${MementoSectionEnd}
!endif

!ifdef OPTION_SECTION_SC_DESKTOP
   ${MementoSection} $OPTION_SECTION_SC_DESKTOP_SECTION SEC_DESKTOP
      SectionIn 1 2
      SetDetailsPrint textonly
      DetailPrint $OPTION_SECTION_SC_DESKTOP_DetailPrint
      SetDetailsPrint listonly
      SetShellVarContext all
      CreateShortCut "$DESKTOP\${APPLICATION_NAME}.lnk" "$INSTDIR\${APPLICATION_EXECUTABLE}"
      SetShellVarContext current
   ${MementoSectionEnd}
!endif

!ifdef OPTION_SECTION_SC_QUICK_LAUNCH
   ${MementoSection} $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION SEC_QUICK_LAUNCH
      SectionIn 1 2
      SetDetailsPrint textonly
      DetailPrint $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint
      SetShellVarContext all
      SetDetailsPrint listonly
      CreateShortCut "$QUICKLAUNCH\${APPLICATION_NAME}.lnk" "$INSTDIR\${APPLICATION_EXECUTABLE}"
      SetShellVarContext current
   ${MementoSectionEnd}
!endif

SectionGroupEnd

${MementoSectionDone}

; Installer section descriptions
;--------------------------------
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_APPLICATION} $OPTION_SECTION_SC_APPLICATION_Desc
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_START_MENU} $OPTION_SECTION_SC_START_MENU_Desc
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_DESKTOP} $OPTION_SECTION_SC_DESKTOP_Desc
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_QUICK_LAUNCH} $OPTION_SECTION_SC_QUICK_LAUNCH_Desc
!insertmacro MUI_FUNCTION_DESCRIPTION_END


Section -post

   ;Uninstaller file.
   SetDetailsPrint textonly
   DetailPrint $UNINSTALLER_FILE_Detail
   SetDetailsPrint listonly
   WriteUninstaller $INSTDIR\uninstall.exe

   ;Registry keys required for installer version handling and uninstaller.
   SetDetailsPrint textonly
   DetailPrint $UNINSTALLER_REGISTRY_Detail
   SetDetailsPrint listonly

   ;Version numbers used to detect existing installation version for comparisson.
   WriteRegStr HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "" $INSTDIR
   WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMajor" "${VER_MAJOR}"
   WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMinor" "${VER_MINOR}"
   WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionRevision" "${VER_PATCH}"
   WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionBuild" "${VER_BUILD}"

   ;Add or Remove Programs entry.
   WriteRegExpandStr ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "UninstallString" '"$INSTDIR\Uninstall.exe"'
   WriteRegExpandStr ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "InstallLocation" "$INSTDIR"
   WriteRegStr ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "DisplayName" "${APPLICATION_NAME}"
   WriteRegStr ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "Publisher" "${APPLICATION_VENDOR}"
   WriteRegStr ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "DisplayIcon" "$INSTDIR\Uninstall.exe,0"
   WriteRegStr ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "DisplayVersion" "${VERSION}"
   WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "VersionMajor" "${VER_MAJOR}"
   WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "VersionMinor" "${VER_MINOR}.${VER_PATCH}.${VER_BUILD}"
   WriteRegStr ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "URLInfoAbout" "http://${APPLICATION_DOMAIN}/"
   WriteRegStr ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "HelpLink" "http://${APPLICATION_DOMAIN}/"
   WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "NoModify" "1"
   WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "NoRepair" "1"


   SetDetailsPrint textonly
   DetailPrint $UNINSTALLER_FINISHED_Detail
SectionEnd

##############################################################################
#                                                                            #
#   UNINSTALLER SECTION                                                      #
#                                                                            #
##############################################################################

Function un.EnsureOwncloudShutdown
   !insertmacro CheckAndConfirmEndProcess "${APPLICATION_EXECUTABLE}"
FunctionEnd

Section Uninstall
   IfFileExists "$INSTDIR\${APPLICATION_EXECUTABLE}" owncloud_installed
      MessageBox MB_YESNO $UNINSTALL_MESSAGEBOX /SD IDYES IDYES owncloud_installed
      Abort $UNINSTALL_ABORT
   owncloud_installed:

   ;Delete registry keys.
   DeleteRegValue HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionBuild"
   DeleteRegValue HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMajor"
   DeleteRegValue HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMinor"
   DeleteRegValue HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionRevision"
   DeleteRegValue HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" ""
   DeleteRegKey HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}"

   DeleteRegKey HKCR "${APPLICATION_NAME}"

   ;Shell extension
   !ifdef OPTION_SECTION_SC_SHELL_EXT
      !define LIBRARY_COM
      !define LIBRARY_SHELL_EXTENSION
      !define LIBRARY_IGNORE_VERSION
      ${If} ${HasSection} SEC_SHELL_EXT
        DetailPrint "Uninstalling x64 overlay DLLs"
        !define LIBRARY_X64
        !insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_PROTECTED "$INSTDIR\shellext\OCContextMenu_x64.dll"
        !insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_PROTECTED "$INSTDIR\shellext\OCOverlays_x64.dll"
        !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED "$INSTDIR\shellext\OCUtil_x64.dll"
        !undef LIBRARY_X64
     ${Else}
        DetailPrint "Uninstalling x86 overlay DLLs"
        !insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_PROTECTED "$INSTDIR\shellext\OCContextMenu_x86.dll"
        !insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_PROTECTED "$INSTDIR\shellext\OCOverlays_x86.dll"
        !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED "$INSTDIR\shellext\OCUtil_x86.dll"
      ${EndIf}
      !undef LIBRARY_COM
      !undef LIBRARY_SHELL_EXTENSION
      !undef LIBRARY_IGNORE_VERSION
  !endif

   ;Start menu shortcut
   !ifdef OPTION_SECTION_SC_START_MENU
      SetShellVarContext all
      ${If} ${HasSection} SEC_START_MENU
         Delete "$SMPROGRAMS\${APPLICATION_NAME}.lnk"
      ${EndIf}
      SetShellVarContext current
   !endif

   ;Desktop shortcut.
   !ifdef OPTION_SECTION_SC_DESKTOP
      ${If} ${HasSection} SEC_DESKTOP
         SetShellVarContext all
         ${If} ${FileExists} "$DESKTOP\${APPLICATION_NAME}.lnk"
            Delete "$DESKTOP\${APPLICATION_NAME}.lnk"
         ${EndIf}
         SetShellVarContext current
      ${EndIf}
   !endif

   ;Quick Launch shortcut.
   !ifdef OPTION_SECTION_SC_QUICK_LAUNCH
      ${If} ${HasSection} SEC_QUICK_LAUNCH
         SetShellVarContext all
         ${If} ${FileExists} "$QUICKLAUNCH\${APPLICATION_NAME}.lnk"
            Delete "$QUICKLAUNCH\${APPLICATION_NAME}.lnk"
         ${EndIf}
         SetShellVarContext current
      ${EndIf}
   !endif

   ;Remove all the Program Files.
   RMDir /r $INSTDIR

   DeleteRegKey ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}"

   SetDetailsPrint textonly
   DetailPrint $UNINSTALLER_FINISHED_Detail
SectionEnd

##############################################################################
#                                                                            #
#   NSIS Installer Event Handler Functions                                   #
#                                                                            #
##############################################################################

Function .onInit
   SetOutPath $INSTDIR

   ${GetParameters} $R0
   ${GetOptions} $R0 "/launch" $R0
   ${IfNot} ${Errors}
      StrCpy $InstallRunIfSilent "yes"
   ${EndIf}

   ${GetParameters} $R0
   ${GetOptions} $R0 "/noautoupdate" $R0
   ${IfNot} ${Errors}
      StrCpy $NoAutomaticUpdates "yes"
   ${EndIf}


   !insertmacro INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini"

   ; uncomment this line if you want to see the language selection
   ;!insertmacro MUI_LANGDLL_DISPLAY

   Call SetLang

   ; Remove Quick Launch option from Windows 7, as no longer applicable - usually.
   ${IfNot} ${AtMostWinVista}
      SectionSetText ${SEC_QUICK_LAUNCH} $INIT_NO_QUICK_LAUNCH
      SectionSetFlags ${SEC_QUICK_LAUNCH} ${SF_RO}
      SectionSetInstTypes ${SEC_QUICK_LAUNCH} 0
   ${EndIf}

   ; Some people might have a shortcut called 'ownCloud' pointing elsewhere, see #356
   ; Unselect item and adjust text
   ${If} ${FileExists} "$DESKTOP\${APPLICATION_NAME}.lnk"
      SectionSetText ${SEC_DESKTOP} $INIT_NO_DESKTOP
      Push $0
      SectionSetFlags ${SEC_DESKTOP} 0
      SectionSetInstTypes ${SEC_DESKTOP} 0
      Pop $0
   ${EndIf}

   ${MementoSectionRestore}

   UAC_TryAgain:
      !insertmacro UAC_RunElevated
      ${Switch} $0
      ${Case} 0
          ${IfThen} $1 = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done
          ${IfThen} $3 <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
          ${If} $1 = 3 ;RunAs completed successfully, but with a non-admin user
             MessageBox mb_YesNo|mb_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND $UAC_INSTALLER_REQUIRE_ADMIN /SD IDNO IDYES UAC_TryAgain IDNO 0
          ${EndIf}
          ;fall-through and die
      ${Case} 1223
         MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_INSTALLER_REQUIRE_ADMIN
         Quit
      ${Case} 1062
         MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_ERROR_LOGON_SERVICE
         Quit
      ${Default}
         MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
         Abort
         Quit
      ${EndSwitch}

   ;Prevent multiple instances.
   System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${APPLICATION_SHORTNAME}Installer") i .r1 ?e'
   Pop $R0
   StrCmp $R0 0 +3
      MessageBox MB_OK|MB_ICONEXCLAMATION $INIT_INSTALLER_RUNNING
      Abort

   ;Use available InstallLocation when possible. This is useful in the uninstaller
   ;via re-install, which would otherwise use a default location - a bug.
   ReadRegStr $R0 ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}" "InstallLocation"
   StrCmp $R0 "" SkipSetInstDir
   StrCpy $INSTDIR $R0
   SkipSetInstDir:

   ;Shutdown ${APPLICATION_NAME} in case Add/Remove re-installer option used.
   Call EnsureOwncloudShutdown
FunctionEnd

Function .onInstSuccess
   ${MementoSectionSave}

   ${If} $NoAutomaticUpdates == "yes"
      WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "skipUpdateCheck" "1"
   ${EndIf}

   ${If} ${Silent}
   ${AndIf} $InstallRunIfSilent == "yes"
     Call LaunchApplication
   ${EndIf}
FunctionEnd

Function .onInstFailed
FunctionEnd

##############################################################################
#                                                                            #
#   NSIS Uninstaller Event Handler Functions                                 #
#                                                                            #
##############################################################################

Function un.onInit
   Call un.SetLang

   UAC_TryAgain:
      !insertmacro UAC_RunElevated
      ${Switch} $0
      ${Case} 0
          ${IfThen} $1 = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done
          ${IfThen} $3 <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
          ${If} $1 = 3 ;RunAs completed successfully, but with a non-admin user
             MessageBox mb_YesNo|mb_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND $UAC_UNINSTALLER_REQUIRE_ADMIN /SD IDNO IDYES UAC_TryAgain IDNO 0
          ${EndIf}
          ;fall-through and die
      ${Case} 1223
         MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_UNINSTALLER_REQUIRE_ADMIN
         Quit
      ${Case} 1062
         MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_ERROR_LOGON_SERVICE
         Quit
      ${Default}
         MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
         Abort
         Quit
      ${EndSwitch}

   ;Prevent multiple instances.
   System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${APPLICATION_SHORTNAME}Uninstaller") i .r1 ?e'
   Pop $R0
   StrCmp $R0 0 +3
      MessageBox MB_OK|MB_ICONEXCLAMATION $INIT_UNINSTALLER_RUNNING
      Abort

   ;Shutdown ${APPLICATION_NAME} in order to remove locked files.
   Call un.EnsureOwncloudShutdown
FunctionEnd

Function un.onUnInstSuccess
FunctionEnd

Function un.onUnInstFailed
FunctionEnd

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,049评论 25 707
  • [ 还没有写完,等加了图会更好一点,一路填坑一路记录 ] 终于,摆脱了windows,去了linux。 前言 已经...
    hh23485阅读 3,135评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,494评论 18 139
  • 9月1号 星期五 晴 宝贝入学第二天了,放学后很自觉的打扫了卫生。她妈妈说不用扫了我给你拍个照片发了就行了,可宝...
    濤_4865阅读 214评论 0 0
  • 落叶归根 那是树叶对大地的眷恋 风筝被线牵引 那是他们依恋的情怀 夕阳西下 大地妈妈声声呼唤 繁星满天 那是我凝视...
    zyl林阅读 564评论 5 10