diff --git a/setup/pykd_setup_common.nsh b/setup/pykd_setup_common.nsh index 0f28456..f915c30 100644 --- a/setup/pykd_setup_common.nsh +++ b/setup/pykd_setup_common.nsh @@ -27,7 +27,7 @@ SetCompressor LZMA !define PRODUCT_SHORT_NAME "pykd" !define PRODUCT_FULL_NAME "Python extension for WinDbg" -!define PRODUCT_VERSION "0.0.0.20" +!define PRODUCT_VERSION "0.1.0.13" !define PRODUCT_URL "http://pykd.codeplex.com/" !define PRODUCT_NAME_AND_VERSION "${PRODUCT_FULL_NAME} ${PRODUCT_ARCH} ${PRODUCT_VERSION}" !define PRODUCT_MANUFACTURER "PyKd Team" @@ -111,7 +111,7 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${PRODUCT_SHORT_NAME}" VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "${PRODUCT_NAME_AND_VERSION}" VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "${PRODUCT_MANUFACTURER}" VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "${PRODUCT_SHORT_NAME} is a trademark of ${PRODUCT_MANUFACTURER}" -VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© All rights reserved 2010-2011" +VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© All rights reserved 2010-2012" VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "${PRODUCT_SHORT_NAME} setup" VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${PRODUCT_VERSION}" @@ -134,13 +134,12 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${PRODUCT_VERSION}" !macro _IsVcRuntimeInstalled _a _b _t _f !insertmacro _LOGICLIB_TEMP - Push 'msvcr80.dll' - Push 'Microsoft.VC80.CRT,version="8.0.50727.6195",type="win32",processorArchitecture="${ARCH}",publicKeyToken="1fc8b3b9a1e18e3b"' - ${WinSxS_HasAssembly} + Push 'msvcr90.dll' + Push 'Microsoft.VC90.CRT,version="9.0.21022.8",type="win32",processorArchitecture="${ARCH}",publicKeyToken="1fc8b3b9a1e18e3b"' + ${WinSxS_HasAssembly} Pop $_LOGICLIB_TEMP !insertmacro _== $_LOGICLIB_TEMP 1 `${_t}` `${_f}` !macroend - !define IsVcRuntimeInstalled `"" IsVcRuntimeInstalled ""` !define un.IsVcRuntimeInstalled `"" IsVcRuntimeInstalled ""` @@ -155,6 +154,16 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${PRODUCT_VERSION}" !define IsPythonInstalled `"" IsPythonInstalled ""` !define un.IsPythonInstalled `"" IsPythonInstalled ""` +!macro _IsDiaRegistered _a _b _t _f + !insertmacro _LOGICLIB_TEMP + ${SetRegView64} + ReadRegStr $_LOGICLIB_TEMP HKCR "CLSID\${CLSID_DiaSource}\InprocServer32" "" + ${SetRegView32} + !insertmacro _!= $_LOGICLIB_TEMP "" `${_t}` `${_f}` +!macroend +!define IsDiaRegistered `"" IsDiaRegistered ""` +!define un.IsDiaRegistered `"" IsDiaRegistered ""` + #------------------------------------------------------------------------------ # Check WinDbg executable presence in selected directory #------------------------------------------------------------------------------ @@ -182,9 +191,9 @@ Section "${PRODUCT_SHORT_NAME} ${PRODUCT_ARCH}" sec_pykd SetOutPath "$INSTDIR" !if ${PRODUCT_ARCH} == "x64" - File "..\x64\Release\pykd.pyd" + File ".\binaries\x64\pykd.pyd" !else - File "..\Release\pykd.pyd" + File ".\binaries\x86\pykd.pyd" !endif SectionEnd @@ -193,8 +202,17 @@ Section "Snippets" sec_snippets SetOverwrite on DetailPrint "Extracting snippets..." - SetOutPath "$DOCUMENTS\${PRODUCT_SHORT_NAME}" - File "..\Snippets\*.py" + SetOutPath "$DOCUMENTS\${PRODUCT_SHORT_NAME}\Snippets" + File "..\branch\0.1.x\snippets\*.py" +SectionEnd + +Section "Samples" sec_samples + # Set Section properties + SetOverwrite on + + DetailPrint "Extracting samples..." + SetOutPath "$DOCUMENTS\${PRODUCT_SHORT_NAME}\Samples" + File /r "..\branch\0.1.x\samples\*.py" SectionEnd Section "Python ${PYTHON_VERSION} ${PRODUCT_ARCH}" sec_python @@ -204,11 +222,13 @@ Section "Python ${PYTHON_VERSION} ${PRODUCT_ARCH}" sec_python ${If} $0 == "OK" DetailPrint "Successfully downloaded." DetailPrint "Installing Python..." - IfErrors ClearErrorFlag1 - ClearErrorFlag1: + ClearErrors ExecWait '"msiexec" /i "$TEMP\${PYTHON_INSTALLER}"' IfErrors PythonInstallFailed DetailPrint "Successfully installed." + ${SetRegView64} + WriteRegDWORD HKLM "Software\${PRODUCT_SHORT_NAME}" "UninstallPython" 1 + ${SetRegView32} ${Else} PythonInstallFailed: DetailPrint "Operation failed. Installation will be continued without Python." @@ -217,24 +237,48 @@ Section "Python ${PYTHON_VERSION} ${PRODUCT_ARCH}" sec_python ${EndIf} SectionEnd -Section "Visual C++ 2005 SP1 (${PRODUCT_ARCH}) runtime" sec_vcruntime - DetailPrint "Installing Microsoft Visual C++ 2005 SP1 (${PRODUCT_ARCH}) runtime library..." +Section "Visual C++ 2008 SP1 (${PRODUCT_ARCH}) runtime" sec_vcruntime + DetailPrint "Installing Microsoft Visual C++ 2008 SP1 (${PRODUCT_ARCH}) runtime library..." SetOutPath "$TEMP" !if ${PRODUCT_ARCH} == "x64" - File "..\x64\Release\vcredist_${PRODUCT_ARCH}.exe" + File ".\binaries\x64\vcredist_${PRODUCT_ARCH}.exe" !else - File "..\Release\vcredist_${PRODUCT_ARCH}.exe" + File ".\binaries\x86\vcredist_${PRODUCT_ARCH}.exe" !endif - + ExecWait "$TEMP\vcredist_${PRODUCT_ARCH}.exe" - IfErrors RuntimeInstallFailed - DetailPrint "Successfully installed." - Return + ${IfNot} ${Errors} + DetailPrint "Successfully installed." + ${SetRegView64} + WriteRegDWORD HKLM "Software\${PRODUCT_SHORT_NAME}" "UninstallVcRuntime" 1 + ${SetRegView32} + ${Else} + DetailPrint "Operation failed. Installation will be continued without Visual C++ runtime." + DetailPrint "Please download and install it manually." + ${EndIf} +SectionEnd - RuntimeInstallFailed: - DetailPrint "Operation failed. Installation will be continued without Visual C++ runtime." - DetailPrint "Please download and install it manually." +Section "Debug Interface Access (${PRODUCT_ARCH}) library" sec_msdia + DetailPrint "Registering Debug Interface Access (${PRODUCT_ARCH}) library..." + + !if ${PRODUCT_ARCH} == "x64" + ${DisableX64FSRedirection} + ClearErrors + ExecWait '"$SYSDIR\regsvr32.exe" /s "$COMMONFILES64\Microsoft Shared\VC\${MSDIA_DLL_NAME}"' + ${EnableX64FSRedirection} + !else + RegDLL "$COMMONFILES\Microsoft Shared\VC\${MSDIA_DLL_NAME}" + !endif + + ${IfNot} ${Errors} + DetailPrint "Successfully registered." + ${SetRegView64} + WriteRegDWORD HKLM "Software\${PRODUCT_SHORT_NAME}" "UnregisterDia" 1 + ${SetRegView32} + ${Else} + DetailPrint "Operation failed. Please register it manually." + ${EndIf} SectionEnd Section -FinishSection @@ -243,7 +287,7 @@ Section -FinishSection WriteRegStr HKLM "Software\${PRODUCT_SHORT_NAME}" "InstallPath" "$INSTDIR" DetailPrint "Adding extension dir and snippets dir to PYTHONPATH..." - WriteRegStr HKLM "Software\Python\PythonCore\${PYTHON_VERSION}\PythonPath\${PRODUCT_SHORT_NAME}" "" "$INSTDIR;$DOCUMENTS\${PRODUCT_SHORT_NAME}" + WriteRegStr HKLM "Software\Python\PythonCore\${PYTHON_VERSION}\PythonPath\${PRODUCT_SHORT_NAME}" "" "$INSTDIR;$DOCUMENTS\${PRODUCT_SHORT_NAME}\Snippets;$DOCUMENTS\${PRODUCT_SHORT_NAME}\Samples" DetailPrint "Registering uninstaller..." WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_SHORT_NAME}" "DisplayName" "${PRODUCT_FULL_NAME} (${PRODUCT_ARCH})" @@ -295,6 +339,11 @@ Function .onInit !insertmacro UnselectSection ${sec_vcruntime} SectionSetText ${sec_vcruntime} "" ${EndIf} + + ${If} ${IsDiaRegistered} + !insertmacro UnselectSection ${sec_msdia} + SectionSetText ${sec_msdia} "" + ${EndIf} FunctionEnd #------------------------------------------------------------------------------ @@ -302,15 +351,19 @@ FunctionEnd #------------------------------------------------------------------------------ LangString DESC_sec_pykd ${LANG_ENGLISH} "${PRODUCT_FULL_NAME}" -LangString DESC_sec_snippets ${LANG_ENGLISH} "Useful code snippets. Will be installed in $DOCUMENTS\${PRODUCT_SHORT_NAME}" +LangString DESC_sec_snippets ${LANG_ENGLISH} "Useful code snippets. Will be installed in $DOCUMENTS\${PRODUCT_SHORT_NAME}\Snippets" +LangString DESC_sec_samples ${LANG_ENGLISH} "Code samples. Will be installed in $DOCUMENTS\${PRODUCT_SHORT_NAME}\Samples" LangString DESC_sec_python ${LANG_ENGLISH} "Let installer download and setup Python ${PYTHON_VERSION} ${PRODUCT_ARCH}" -LangString DESC_sec_vcruntime ${LANG_ENGLISH} "Let installer download and setup Microsoft Visual C++ 2005 SP1 (${PRODUCT_ARCH}) runtime library" +LangString DESC_sec_vcruntime ${LANG_ENGLISH} "Let installer download and setup Microsoft Visual C++ 2008 SP1 (${PRODUCT_ARCH}) runtime library" +LangString DESC_sec_msdia ${LANG_ENGLISH} "Let installer register Debug Interface Access (${PRODUCT_ARCH}) library" !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${sec_pykd} $(DESC_sec_pykd) !insertmacro MUI_DESCRIPTION_TEXT ${sec_snippets} $(DESC_sec_snippets) + !insertmacro MUI_DESCRIPTION_TEXT ${sec_samples} $(DESC_sec_samples) !insertmacro MUI_DESCRIPTION_TEXT ${sec_python} $(DESC_sec_python) !insertmacro MUI_DESCRIPTION_TEXT ${sec_vcruntime} $(DESC_sec_vcruntime) + !insertmacro MUI_DESCRIPTION_TEXT ${sec_msdia} $(DESC_sec_msdia) !insertmacro MUI_FUNCTION_DESCRIPTION_END #------------------------------------------------------------------------------ @@ -346,11 +399,38 @@ Section /o "un.Python ${PYTHON_VERSION} ${PRODUCT_ARCH}" unsec_python ExecWait '"msiexec" /x ${PYTHON_PRODUCT_CODE}' SectionEnd -Section /o "un.Visual C++ 2005 SP1 (${PRODUCT_ARCH}) runtime" unsec_vcruntime - DetailPrint "Uninstalling Microsoft Visual C++ 2005 SP1 (${PRODUCT_ARCH}) runtime library..." +Section /o "un.Debug Interface Access (${PRODUCT_ARCH}) library" unsec_msdia + DetailPrint "Unregistering Debug Interface Access (${PRODUCT_ARCH}) library..." + ${SetRegView64} + ReadRegStr $R0 HKCR "CLSID\${CLSID_DiaSource}\InprocServer32" "" + ${SetRegView32} + + !if ${PRODUCT_ARCH} == "x64" + ${DisableX64FSRedirection} + ClearErrors + ExecWait '"$SYSDIR\regsvr32.exe" /s /u "$R0"' + ${EnableX64FSRedirection} + !else + UnRegDLL $R0 + !endif +SectionEnd + +Section /o "un.Visual C++ 2008 SP1 (${PRODUCT_ARCH}) runtime" unsec_vcruntime + DetailPrint "Uninstalling Microsoft Visual C++ 2008 SP1 (${PRODUCT_ARCH}) runtime library..." ExecWait '"msiexec" /x ${VCRUNTIME_PRODUCT_CODE}' SectionEnd +Section -un.FinishSection + ${SetRegView64} + WriteRegDWORD HKLM "Software\${PRODUCT_SHORT_NAME}" "UninstallPython" 0 + WriteRegDWORD HKLM "Software\${PRODUCT_SHORT_NAME}" "UnregisterDia" 0 + WriteRegDWORD HKLM "Software\${PRODUCT_SHORT_NAME}" "UninstallVcRuntime" 0 +# DeleteRegValue HKLM "Software\${PRODUCT_SHORT_NAME}" "UninstallPython" +# DeleteRegValue HKLM "Software\${PRODUCT_SHORT_NAME}" "UnregisterDia" +# DeleteRegValue HKLM "Software\${PRODUCT_SHORT_NAME}" "UninstallVcRuntime" + ${SetRegView32} +SectionEnd + #------------------------------------------------------------------------------ # Before first page displayed #------------------------------------------------------------------------------ @@ -360,12 +440,35 @@ SectionEnd !define WinSxS_HasAssembly `Call un.WinSxS_HasAssembly` Function un.onInit - ${IfNot} ${IsPythonInstalled} + ${SetRegView64} + ReadRegDWORD $R0 HKLM "Software\${PRODUCT_SHORT_NAME}" "UninstallPython" + ${SetRegView32} + + ${If} ${Errors} + ${OrIf} $R0 == 0 + #${OrIfNot} ${IsPythonInstalled} !insertmacro UnselectSection ${unsec_python} SectionSetText ${unsec_python} "" ${EndIf} - ${IfNot} ${IsVcRuntimeInstalled} + ${SetRegView64} + ReadRegDWORD $R0 HKLM "Software\${PRODUCT_SHORT_NAME}" "UnregisterDia" + ${SetRegView32} + + ${If} ${Errors} + ${OrIf} $R0 == 0 + #${OrIfNot} ${IsDiaRegistered} + !insertmacro UnselectSection ${unsec_msdia} + SectionSetText ${unsec_msdia} "" + ${EndIf} + + ${SetRegView64} + ReadRegDWORD $R0 HKLM "Software\${PRODUCT_SHORT_NAME}" "UninstallVcRuntime" + ${SetRegView32} + + ${If} ${Errors} + ${OrIf} $R0 == 0 + #${OrIfNot} ${IsVcRuntimeInstalled} !insertmacro UnselectSection ${unsec_vcruntime} SectionSetText ${unsec_vcruntime} "" ${EndIf} @@ -377,10 +480,12 @@ FunctionEnd LangString DESC_unsec_pykd ${LANG_ENGLISH} "${PRODUCT_FULL_NAME}" LangString DESC_unsec_python ${LANG_ENGLISH} "Uninstall Python ${PYTHON_VERSION} ${PRODUCT_ARCH}" -LangString DESC_unsec_vcruntime ${LANG_ENGLISH} "Uninstall Microsoft Visual C++ 2005 SP1 (${PRODUCT_ARCH}) runtime library" +LangString DESC_unsec_msdia ${LANG_ENGLISH} "Unregister Debug Interface Access (${PRODUCT_ARCH}) library" +LangString DESC_unsec_vcruntime ${LANG_ENGLISH} "Uninstall Microsoft Visual C++ 2008 SP1 (${PRODUCT_ARCH}) runtime library" !insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${unsec_pykd} $(DESC_unsec_pykd) !insertmacro MUI_DESCRIPTION_TEXT ${unsec_python} $(DESC_unsec_python) + !insertmacro MUI_DESCRIPTION_TEXT ${unsec_msdia} $(DESC_unsec_msdia) !insertmacro MUI_DESCRIPTION_TEXT ${unsec_vcruntime} $(DESC_unsec_vcruntime) !insertmacro MUI_UNFUNCTION_DESCRIPTION_END diff --git a/setup/pykd_setup_x64.nsi b/setup/pykd_setup_x64.nsi index 76521ef..9e23cbe 100644 --- a/setup/pykd_setup_x64.nsi +++ b/setup/pykd_setup_x64.nsi @@ -10,6 +10,10 @@ !define PYTHON_PRODUCT_CODE "{6151CF20-0BD8-4023-A4A0-6A86DCFE58E6}" # When changing VC runtime vesion don't forget to update ProductCode appropriately -!define VCRUNTIME_PRODUCT_CODE "{ad8a2fa1-06e7-4b0d-927d-6e54b3d31028}" +# VC9 (VS2008) SP1 + MFC Security Update +!define VCRUNTIME_PRODUCT_CODE "{5FCE6D76-F5DC-37AB-B2B8-22AB8CEDB1D4}" + +!define MSDIA_DLL_NAME "msdia90.dll" +!define CLSID_DiaSource "{4C41678E-887B-4365-A09E-925D28DB33C2}" !include "pykd_setup_common.nsh" diff --git a/setup/pykd_setup_x86.nsi b/setup/pykd_setup_x86.nsi index 5b19973..11d3237 100644 --- a/setup/pykd_setup_x86.nsi +++ b/setup/pykd_setup_x86.nsi @@ -10,6 +10,10 @@ !define PYTHON_PRODUCT_CODE "{6151CF20-0BD8-4023-A4A0-6A86DCFE58E5}" # When changing VC runtime vesion don't forget to update ProductCode appropriately -!define VCRUNTIME_PRODUCT_CODE "{710f4c1c-cc18-4c49-8cbf-51240c89a1a2}" +# VC9 (VS2008) SP1 + MFC Security Update +!define VCRUNTIME_PRODUCT_CODE "{9BE518E6-ECC6-35A9-88E4-87755C07200F}" + +!define MSDIA_DLL_NAME "msdia90.dll" +!define CLSID_DiaSource "{4C41678E-887B-4365-A09E-925D28DB33C2}" !include "pykd_setup_common.nsh"