mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-22 05:13:22 +08:00
62 lines
1.7 KiB
Plaintext
62 lines
1.7 KiB
Plaintext
![]() |
!ifndef HASASSEMBLY_INCLUDED
|
||
|
!define HASASSEMBLY_INCLUDED
|
||
|
!verbose Push
|
||
|
!verbose 3
|
||
|
|
||
|
!include LogicLib.nsh
|
||
|
!include Util.nsh
|
||
|
|
||
|
!macro _WinSxS_HasAssembly
|
||
|
/*
|
||
|
push 'msvcr80.dll'
|
||
|
push 'Microsoft.VC80.CRT,version="8.0.50727.42",type="win32",processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b"'
|
||
|
Call WinSxS_HasAssembly
|
||
|
pop $0 ;0 on fail, 1 if it is in WinSxS or 2 if LoadLibrary worked on pre xp (call GetDLLVersion to make sure if you require a minimum version)
|
||
|
*/
|
||
|
Exch $8
|
||
|
Exch
|
||
|
Exch $7
|
||
|
push $9
|
||
|
StrCpy $9 0
|
||
|
push $0
|
||
|
push $R0
|
||
|
push $R1
|
||
|
${If} ${AtLeastWinXP}
|
||
|
System::Call "sxs::CreateAssemblyCache(*i.R0,i0)i.r0"
|
||
|
${If} $0 == 0
|
||
|
System::Call '*(i 24,i0,l,i0,i0)i.R1' ;TODO,BUGBUG: check alloc success
|
||
|
System::Call `$R0->4(i 0,w '$8',i $R1)i.r0` ;IAssemblyCache::QueryAssemblyInfo
|
||
|
${If} $0 == 0
|
||
|
System::Call '*$R1(i,i.r0)'
|
||
|
IntOp $0 $0 & 1 ;ASSEMBLYINFO_FLAG_INSTALLED=1
|
||
|
${IfThen} $0 <> 0 ${|} StrCpy $9 1 ${|}
|
||
|
${EndIf}
|
||
|
System::Free $R1
|
||
|
System::Call $R0->2() ;IAssemblyCache::Release
|
||
|
${EndIf}
|
||
|
${Else}
|
||
|
System::Call kernel32::LoadLibrary(t"$7")i.r0
|
||
|
${If} $0 != 0
|
||
|
StrCpy $9 2
|
||
|
System::Call 'kernel32::FreeLibrary(i r0)'
|
||
|
${EndIf}
|
||
|
${EndIf}
|
||
|
pop $R1
|
||
|
pop $R0
|
||
|
pop $0
|
||
|
Exch 2
|
||
|
pop $8
|
||
|
pop $7
|
||
|
Exch $9
|
||
|
!macroend
|
||
|
|
||
|
Function WinSxS_HasAssembly
|
||
|
!insertmacro _WinSxS_HasAssembly
|
||
|
FunctionEnd
|
||
|
|
||
|
Function un.WinSxS_HasAssembly
|
||
|
!insertmacro _WinSxS_HasAssembly
|
||
|
FunctionEnd
|
||
|
|
||
|
!verbose Pop
|
||
|
!endif
|