赞 | 13 |
VIP | 0 |
好人卡 | 0 |
积分 | 49 |
经验 | 10673 |
最后登录 | 2025-1-1 |
在线时间 | 1434 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 4893
- 在线时间
- 1434 小时
- 注册时间
- 2017-3-23
- 帖子
- 493
|
本帖最后由 塞路休斯 于 2019-2-27 05:26 编辑
简单的解决办法,把运行库的名字改成“如果打不开先安装这个”,打到同一个压缩包里面。
复杂的解决办法,先判断系统是否含有运行库,如果没有弹个窗口告知,并帮用户用默认浏览器打开运行库下载页面。如果检测运行库存在,则继续调用你的游戏程序。
很久不用windows了,以下代码网上找来,我也没法帮你测试,但目测问题不大,稍作修改即可。
[pre lang="c++" line="1" file="1"]#include "stdafx.h"
#include <string>
#include <Windows.h>
using std::string;
LPCTSTR reg[18] = { _T("{A49F249F-0C91-497F-86DF-B2585E8E76B7}"),//Microsoft Visual C++ 2005 Redistributable X86
_T("{7299052B-02A4-4627-81F2-1818DA5D550D}"),//Microsoft Visual C++ 2005 SP1 Redistributable X86
_T("{837b34e3-7c30-493c-8f6a-2b0f04e2912c}"),//Microsoft Visual C++ 2005 SP1 Redistributable ATL Security Update X86
_T("{6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}"),//Microsoft Visual C++ 2005 Redistributable X64
_T("{071C9B48-7C32-4621-A0AC-3F809523288F}"),//Microsoft Visual C++ 2005 SP1 Redistributable X64
_T("{6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}"),//Microsoft Visual C++ 2005 SP1 Redistributable ATL Security Update X64
_T("{03ED71EA-F531-4927-AABD-1C31BCE8E187}"),//Microsoft Visual C++ 2005 Redistributable IA64
_T("{0F8FB34E-675E-42ED-850B-29D98C2ECE08}"),//Microsoft Visual C++ 2005 SP1 Redistributable IA64
_T("{85025851-A784-46D8-950D-05CB3CA43A13}"),//Microsoft Visual C++ 2005 SP1 Redistributable ATL Security Update IA64
_T("{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}"),//Microsoft Visual C++ 2008 Redistributable X86
_T("{9A25302D-30C0-39D9-BD6F-21E6EC160475}"),//Microsoft Visual C++ 2008 SP1 Redistributable X86
_T("{1F1C2DFC-2D24-3E06-BCB8-725134ADF989}"),//Microsoft Visual C++ 2008 SP1 Redistributable ATL Security Update X86
_T("{350AA351-21FA-3270-8B7A-835434E766AD}"),//Microsoft Visual C++ 2008 Redistributable X64
_T("{8220EEFE-38CD-377E-8595-13398D740ACE}"),//Microsoft Visual C++ 2008 SP1 Redistributable X64
_T("{4B6C7001-C7D6-3710-913E-5BC23FCE91E6}"),//Microsoft Visual C++ 2008 SP1 Redistributable ATL Security Update X64
_T("{2B547B43-DB50-3139-9EBE-37D419E0F5FA}"),//Microsoft Visual C++ 2008 Redistributable IA64
_T("{5827ECE1-AEB0-328E-B813-6FC68622C1F9}"),//Microsoft Visual C++ 2008 SP1 Redistributable IA64
_T("{977AD349-C2A8-39DD-9273-285C08987C7B}"),//Microsoft Visual C++ 2008 SP1 Redistributable ATL Security Update IA64
};
/*
功能:检测lpszSubKey是否存在
*/
bool detectVCppRedistributable(LPCTSTR lpszSubKey){
//printf("%ls\n", lpszSubKey);
HKEY hKey;
int ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_READ, &hKey);
RegCloseKey(hKey);
return (ret == 0) ? true : false;
}
int _tmain(int argc, _TCHAR* argv[]){
//拼接key并调用函数detectVCppRedistributable检测注册表
for (int i = 0; i < 18; ++i){
wchar_t key[100] = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\");
wcscat_s(key, 100, reg);
if (detectVCppRedistributable(key)){
printf("yes\n");
break;
}
}
return 0;
}[/pre] |
|