解决QQ无法在沙盘中运行的问题
2012-03-10 20:11
260 查看
可能不少在沙盘(Sandboxie)里运行QQ的同学都会遇到这样的问题:
先把QQ装在沙盘里,然后把QQ的安装文件夹复制到另一个地方,清空沙盘,再从沙盘中启动QQ:
经过排除法查找,确定这个问题是由于两个安全组件(COM)没有注册引起的。这两个组件的动态链接库文件分别是安装在以下目录的SSOCommon.dll和SSOPlatform.dll
c:\program files\common\tencent\TXSSO\版本号\bin\
为了解决这个问题,写了一个简单的QQ启动器,把它放在QQ的bin目录下,在沙盘里运行它就可以自动注册这两个组件,并自动启动QQ了。是代码附在下面仅供参考,编译需要项目文件支持。
点击这里下载配置好的项目文件包(VS2008)
点击这里下载编译好的程序
注意,我当前版本的TXSSO是1.2.1.38。如果你的QQ不是这个版本,请将项目里的两个dll替换成你的QQ里附带的版本,并重新编译。
先把QQ装在沙盘里,然后把QQ的安装文件夹复制到另一个地方,清空沙盘,再从沙盘中启动QQ:
经过排除法查找,确定这个问题是由于两个安全组件(COM)没有注册引起的。这两个组件的动态链接库文件分别是安装在以下目录的SSOCommon.dll和SSOPlatform.dll
c:\program files\common\tencent\TXSSO\版本号\bin\
为了解决这个问题,写了一个简单的QQ启动器,把它放在QQ的bin目录下,在沙盘里运行它就可以自动注册这两个组件,并自动启动QQ了。是代码附在下面仅供参考,编译需要项目文件支持。
点击这里下载配置好的项目文件包(VS2008)
点击这里下载编译好的程序
注意,我当前版本的TXSSO是1.2.1.38。如果你的QQ不是这个版本,请将项目里的两个dll替换成你的QQ里附带的版本,并重新编译。
#include <tchar.h> #include <windows.h> #include <atlstr.h> #include <shlobj.h> #include "resource.h" HKEY CreateKey(LPCTSTR lpKey) { HKEY hKey; DWORD dwDisp; RegCreateKeyEx(HKEY_LOCAL_MACHINE, lpKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &dwDisp); return hKey; } void SetValue(HKEY hKey, LPCTSTR lpName, LPCTSTR lpValue) { CString strValue(lpValue); if (lpName) { RegSetValueEx(hKey, lpName, 0, REG_SZ, (LPBYTE)(LPCTSTR)strValue, strValue.GetLength() * sizeof(TCHAR)); } else { RegSetValue(hKey, NULL, REG_SZ, strValue, strValue.GetLength()); } } void SaveResourceFile(LPCTSTR lpType, DWORD dwResId, LPCTSTR lpFileName) { DWORD dwRet; HRSRC hResInfo = FindResource(NULL, MAKEINTRESOURCE(dwResId), lpType); HGLOBAL hResMem = LoadResource(NULL, hResInfo); DWORD dwSize = SizeofResource(NULL, hResInfo); LPVOID lpData = LockResource(hResMem); HANDLE hDllFile = CreateFile(lpFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hDllFile, lpData, dwSize, &dwRet, NULL); CloseHandle(hDllFile); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { CString strRoot, strSubPath, strFile; SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES_COMMON, NULL, SHGFP_TYPE_CURRENT, strRoot.GetBuffer(MAX_PATH)); strRoot.ReleaseBuffer(); strRoot += _T("\\Tencent\\"); CreateDirectory(strRoot, NULL); strRoot += _T("TXSSO\\"); CreateDirectory(strRoot, NULL); strRoot += _T("1.2.1.38\\"); CreateDirectory(strRoot, NULL); strRoot += _T("Bin\\"); CreateDirectory(strRoot, NULL); SaveResourceFile(_T("DLLFILE"), IDR_DLL_SSOCOMMON, strRoot + _T("SSOCommon.dll")); SaveResourceFile(_T("DLLFILE"), IDR_DLL_SSOPLATFORM, strRoot + _T("SSOPlatform.dll")); HKEY hKey; hKey = CreateKey(_T("SOFTWARE\\TENCENT\\TXSSO")); SetValue(hKey, _T("Version"), _T("1.2.1.38")); RegCloseKey(hKey); hKey = CreateKey(_T("SOFTWARE\\Classes\\SSOAxCtrlForPTLogin.SSOForPTLogin2")); SetValue(hKey, NULL, _T("SSOForPTLogin2 Class")); RegCloseKey(hKey); hKey = CreateKey(_T("SOFTWARE\\Classes\\SSOAxCtrlForPTLogin.SSOForPTLogin2\\CLSID")); SetValue(hKey, NULL, _T("{EAAED308-7322-4b9b-965E-171933ADD473}")); RegCloseKey(hKey); hKey = CreateKey(_T("SOFTWARE\\Classes\\SSOAxCtrlForPTLogin.SSOForPTLogin2\\CurVer")); SetValue(hKey, NULL, _T("SSOAxCtrlForPTLogin.SSOForPTLogin.2")); RegCloseKey(hKey); ShellExecute(NULL, _T("open"), _T("QQ.exe"), NULL, NULL, SW_SHOW); return 0; }
相关文章推荐
- 【原创】ROM中非Windows目录下应用无法运行问题解决
- 如何解决Win10系统鲁大师无法运行的问题?
- pip安装后无法在CMD运行问题的解决
- Mac OS X 10.11 因 SIP 安全问题无法运行某些 APP 的解决方法
- 启动提示archlinux中virtualbox无法运行问题解决
- 【问题解决】由于未在web.config文件中启用调试,因此无法在调试模式下运行该页
- Windows7 64位下SDK Manager.exe无法运行问题解决方法
- 如何解决由于服务过多或异常导致ArcGIS Server 无法正常运行的问题
- 解决Matlab 2014a在Mac OS 10.10 Yosemite无法运行的问题
- 关于vs2005的“应用程序配置不正确,无法运行”问题的解决方法
- 解决 Virtual PC 在 XP PAE模式下无法运行的问题
- 解决.NET 4.0下无法直接运行.NET 2.0程序的问题
- 解决无法在java程序中运行cmd命令的问题
- ABP学习 解决:Update-Database : 无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的问题
- 解决ADB server didn't ACK问题,Eclipse项目无法正常运行
- 解决QT 编译后脱离编译器无法运行的问题
- ubuntu安装wine QQ无法启动问题解决
- 解决tomcat能正常运行, 能进入管理界面, 但无法进入默认界面的问题!
- 2011QQ 解决无法登陆问题
- windows下解决.exe无法运行的问题