C++检测客户机 .net安装情况

由于XP仍然迟迟不肯退出江湖,而很多XP系统上并没有安装.net framework,因此基于.net架构的桌面应用最好检测一下再启动,以免直接来个运行错误吓到客户。这里提供一个简单的方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "stdafx.h"
#include <windows.h>
 
LPSTR regeditVision[] ={"SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v2.0", 
"SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v2.0.50727", 
"SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v3.0", 
"SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v3.5"}; 
 
bool CheckReg() 
{    
    bool res=TRUE; 
    //判断注册表是否存在 
    for (int i=0;i<4;i++) 
    { 
        HKEY ck;//注册表的键 
 
		//检查注册表是否存在这个键值
        if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,
			regeditVision[i],0,KEY_ALL_ACCESS,&ck))		  
        {        
            RegCloseKey(ck);//关闭注册表  
            res=TRUE; 
            break; 
        } 
        else   
        {   
            res=FALSE; 
        } 
    } 
    return res; 
} 
 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 	// 检测是否重复运行
	HWND hWnd = ::FindWindow(NULL, "你的程序窗口名");
	if (hWnd)
	{
	    MessageBox(NULL,"程序已运行!","提示",MB_OK);
		return 0;
	}
    if(CheckReg())
	{
		if(WinExec("你的程序", SW_SHOWNORMAL) == ERROR_FILE_NOT_FOUND)
			MessageBox(NULL,"启动失败!","提示",MB_OK);
	}
	else	
		MessageBox(NULL,"检测到您的系统未安装.net framework,请安装2.0以上版本再试",
			"提示",MB_OK);
	return 0;
}

转载请注明: 转载自MeGUI中文版博客

本文链接地址: http://meguizhcn.sourceforge.net/blog/?p=324