Module: wine Branch: master Commit: d4a3e9c01621d454f1373d12a450b9cc569c5603 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d4a3e9c01621d454f1373d12a4...
Author: Aric Stewart aric@codeweavers.com Date: Thu May 8 11:26:47 2008 -0500
shdocvw: Do not do our iexplore.exe registration if native Internet Explorer is detected to be present.
---
dlls/shdocvw/Makefile.in | 2 +- dlls/shdocvw/factory.c | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/dlls/shdocvw/Makefile.in b/dlls/shdocvw/Makefile.in index e4f573a..e254078 100644 --- a/dlls/shdocvw/Makefile.in +++ b/dlls/shdocvw/Makefile.in @@ -6,7 +6,7 @@ VPATH = @srcdir@ MODULE = shdocvw.dll IMPORTLIB = shdocvw IMPORTS = uuid shell32 shlwapi user32 advapi32 kernel32 -DELAYIMPORTS = urlmon ole32 oleaut32 +DELAYIMPORTS = version urlmon ole32 oleaut32
C_SRCS = \ classinfo.c \ diff --git a/dlls/shdocvw/factory.c b/dlls/shdocvw/factory.c index 3a4ba9f..69cbaa3 100644 --- a/dlls/shdocvw/factory.c +++ b/dlls/shdocvw/factory.c @@ -26,6 +26,8 @@ #include "advpub.h" #include "isguids.h"
+#include "winver.h" + #include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); @@ -287,8 +289,39 @@ HRESULT WINAPI DllUnregisterServer(void) return UnRegisterTypeLib(&LIBID_SHDocVw, 1, 1, LOCALE_SYSTEM_DEFAULT, SYS_WIN32); }
+static BOOL check_native_ie(void) +{ + static const WCHAR cszPath[] = {'b','r','o','w','s','e','u','i','.','d','l','l',0}; + DWORD handle,size; + + size = GetFileVersionInfoSizeW(cszPath,&handle); + if (size) + { + LPVOID buf; + LPWSTR lpFileDescription; + UINT dwBytes; + static const WCHAR cszFD[] = {'\','S','t','r','i','n','g','F','i','l','e','I','n','f','o','\','0','4','0','9','0','4','e','4','\','F','i','l','e','D','e','s','c','r','i','p','t','i','o','n',0}; + static const WCHAR cszWine[] = {'W','i','n','e',0}; + + buf = HeapAlloc(GetProcessHeap(),0,size); + GetFileVersionInfoW(cszPath,0,size,buf); + + if (VerQueryValueW(buf, cszFD, (LPVOID*)&lpFileDescription, &dwBytes) && + strstrW(lpFileDescription,cszWine)) + return FALSE; + } + + return TRUE; +} + DWORD register_iexplore(BOOL doregister) { - HRESULT hres = reg_install(doregister ? "RegisterIE" : "UnregisterIE", NULL); + HRESULT hres; + if (check_native_ie()) + { + TRACE("Native IE detected, not doing registration\n"); + return S_OK; + } + hres = reg_install(doregister ? "RegisterIE" : "UnregisterIE", NULL); return !SUCCEEDED(hres); }