C++检查注册表中.net版本号,自动安装.net安装包,然后再执行C#程序

简介: 说实在的我的C++功底太浅,希望达人不要笑话 做这篇文章主要是为了解决斯克迪亚的这个问题实现自动判定是否有.Net框架,没有就安装.Net框架!啥也不说了先来代码吧!代码中注释还算多,如仍有问题请在此文下面的评论中提出 代码 #include #include #include usi...

说实在的我的C++功底太浅,希望达人不要笑话

做这篇文章主要是为了解决斯克迪亚的这个问题
实现自动判定是否有.Net框架,没有就安装.Net框架!

啥也不说了先来代码吧!
代码中注释还算多,如仍有问题请在此文下面的评论中提出

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
 
  
#include < stdio.h >
#include
< windows.h >
#include
< iostream >

using namespace std;

int CheckReg()
{
LPSTR regeditStr
= " SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v3.5 " ; // 现在能判断是不是3.5,但不确定是不是3.5 SP1
HKEY ck; // 注册表的键
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,regeditStr, 0 ,KEY_ALL_ACCESS, & ck)) // 检查注册表是否存在这个键值
{
RegCloseKey(ck);
// 关闭注册表
cout << " 他的系统里安装了.net3.5,可以执行你的安装包了 " << endl;
return 1 ;
}
else
{
cout
<< " 他的系统里没安装.net3.5,现在开始安装! " << endl;
return 0 ;
}
}

int StartExe(LPSTR path)
{
STARTUPINFO stinfo;
// 当创建新进程时,将使用该结构的有关成员
ZeroMemory(( void * ) & stinfo, sizeof (STARTUPINFO)); // 把stinfo置空
PROCESS_INFORMATION ProcessInfo; // 进程信息的数据结构
stinfo.cb = sizeof (STARTUPINFO); // 包含STARTUPINFO结构中的字节数
stinfo.dwFlags = STARTF_USESHOWWINDOW; // 显示窗口
stinfo.wShowWindow = SW_SHOW; // 该应用程序的第一个重叠窗口应该如何出现
if ( ! CreateProcess(path,path,NULL,NULL, false , 0 ,NULL,NULL, & stinfo, & ProcessInfo))
{
// DWORD dwRet = GetLastError(); // 启动失败,获取异常值
return 0 ;
}
else
{
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
// 等待安装完成,此方法为阻塞方法!
return 1 ;
}
}

int StartCheck()
{
LPSTR sNetfile
= " C:\\Program Files\\NetMeeting\\conf.exe " ; // 你的.net安装包的路径
LPSTR sExefile = " C:\\Program Files\\Google\\Google Pinyin 2\\GooglePinyinSettingWizard.exe " ; // 你的程序的路径
if (CheckReg())
{
StartExe(sExefile);
cout
<< " 安装完成 " << endl;
}
else
{
StartExe(sNetfile);
StartCheck();
}
return 1 ;
}

int main( void )
{
StartCheck();
char a;
cin
>> a;
return 0 ;
}

 

目录
相关文章
|
8天前
|
编译器 开发工具 C++
Dev-C++详细安装教程及中文设置(附带安装包链接)
Dev-C++详细安装教程及中文设置(附带安装包链接)
25 0
|
22天前
|
存储 缓存 算法
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
111 0
|
1月前
|
编译器 Linux C++
3C++程序的编写和实现
3C++程序的编写和实现
17 2
|
1月前
|
C++ 开发者
2C++的程序的构成和书写形式
2C++的程序的构成和书写形式
16 2
|
27天前
|
算法 安全 编译器
【C++ 关键字 override】C++ 重写关键字override(强制编译器检查该函数是否覆盖已存在的虚函数)
【C++ 关键字 override】C++ 重写关键字override(强制编译器检查该函数是否覆盖已存在的虚函数)
25 0
|
24天前
|
安全 算法 编译器
【C++ 静态断言的技巧】掌握C++中static_assert的力量:深入探讨编译时检查
【C++ 静态断言的技巧】掌握C++中static_assert的力量:深入探讨编译时检查
41 1
|
24天前
|
XML 算法 C语言
【C/C++ 静态代码检查工具 Cppcheck 】Cppcheck 检测器列表和检查规则大全一览
【C/C++ 静态代码检查工具 Cppcheck 】Cppcheck 检测器列表和检查规则大全一览
60 0
|
27天前
|
存储 缓存 安全
【C/C++ 关键字 存储类说明符】C/C++ 的mutable 关键字 忽略对该数据成员的常量性检查在const函数中修改变量值
【C/C++ 关键字 存储类说明符】C/C++ 的mutable 关键字 忽略对该数据成员的常量性检查在const函数中修改变量值
28 0
|
29天前
|
缓存 编译器 程序员
C/C++编译器并行优化技术:并行优化针对多核处理器和多线程环境进行优化,以提高程序的并行度
C/C++编译器并行优化技术:并行优化针对多核处理器和多线程环境进行优化,以提高程序的并行度
60 0
|
29天前
|
缓存 编译器 程序员
C/C++编译器全局优化技术:全局优化是针对整个程序进行的优化,包括函数之间的优化
C/C++编译器全局优化技术:全局优化是针对整个程序进行的优化,包括函数之间的优化
25 0