[Bug 17631] LiteStep 0.3 refuses to install due to failing VC++ runtime detection in WinSxS (needs sxs.dll IAssemblyCache::QueryAssemblyInfo implementation)

wine-bugs at winehq.org wine-bugs at winehq.org
Wed Jan 18 11:26:18 CST 2012


http://bugs.winehq.org/show_bug.cgi?id=17631

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                URL|http://litestep.net/        |https://github.com/Tobbe/lo
                   |                            |si/downloads
                 CC|                            |focht at gmx.net
            Summary|LiteStep 0.3 doesn't        |LiteStep 0.3 refuses to
                   |install                     |install due to failing VC++
                   |                            |runtime detection in WinSxS
                   |                            |(needs sxs.dll
                   |                            |IAssemblyCache::QueryAssemb
                   |                            |lyInfo implementation)

--- Comment #9 from Anastasius Focht <focht at gmx.net> 2012-01-18 11:26:18 CST ---
Hello,

confirming, still present.

I found the code for that VC++ runtime check in NSIS installer here:

http://nsis.sourceforge.net/WinSxS_QueryAssemblyInfo_to_check_if_assembly_is_installed

It seems to closely match what can be seen in trace logs...

--- snip ---
Function WinSxS_HasAssembly ;legacyDllName,(Strong)AssemblyName
/*
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
FunctionEnd
--- snip ---

Example code to use this detection function:

--- snip ---
!include LogicLib.nsh
!include WinVer.nsh
Section
var /GLOBAL hasCRT
!define CRTCHECKDLL msvcr80.dll
!define CRTCHECKNAME
'Microsoft.VC80.CRT,version="8.0.50727.42",type="win32",processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b"'
push '${CRTCHECKDLL}'
push '${CRTCHECKNAME}'
call WinSxS_HasAssembly
pop $hasCRT
DetailPrint ${CRTCHECKDLL}=$hasCRT
SectionEnd
--- snip ---

Old LiteStep installers can be downloaded here:

https://github.com/Tobbe/losi/downloads

https://github.com/downloads/Tobbe/losi/LOSI-0.3.exe

$ sha1sum LOSI-0.3.exe 
cee31fa9ebf1838b89e7452e6269b4d20f1c51b8  LOSI-0.3.exe

$ wine --version
wine-1.3.37-108-g4cd49d3

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list