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

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

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

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

代码


#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;
}

 

时间: 2024-11-08 22:33:13

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

用vbscript得到注册表中是否存在某个值_vbs

问: 嗨,Scripting Guy!如何知道远程计算机上的注册表中是否存在某个值? -- AL 答: 嗨,AL.完全披露时间:尽管我们叫做 Scripting Guy,但这并不表示我们了解有关脚本编写的一切事情.这个问题就是一个很好的例证.第一次看到这个问题时,我们认为:"好吧,WMI 中显然有某种 If Exists 方法可以实现这个目的."但当我们发现其中并没有这样的方法时,知道我们有多吃惊么?事实上,我们找不到任何可以检查注册表中是否存在某个值的方法.我们甚至--惭愧!--去查

ie-IE自动清除缓存的选择框在注册表中的路径

问题描述 IE自动清除缓存的选择框在注册表中的路径 RT, 图中的选择框在注册表中的路径和值在那里 解决方案 HKEY_LOCAL_MACHINESoftwarePoliciesMicrosoftInternet ExplorerPrivacy : ClearBrowsingHistoryOnExit type (equals) reg_dword value External Variable:oval:gov.nist.USGCB.ie8:var:31095 (Computer Config

注册表中存储数据库链接字符串

链接|数据|数据库|注册表|字符串 引言: 数据库的链接字符串是用数据库开发所必须的信息,我们通过链接字符串连接数据库,并进行各种数据库操作.那么链接字符串的存到哪里好呢?这没有什么定论,Asp系统开发中,一般存在一个conn.asp包含文件中或者如果又是COM,可能还会封闭到COM中,.Net开发中,大多数都选择存在Web.conifg中,也有人存储在另外一个单独的文件中.那么本文提供的是把数据库链接信息存储到注册表中的方案.也许你要问为什么要存到注册表呢?我想最起码的好处是安全,注册表的访问

如何检查注册表是否被电脑攻击

  如果怀疑电脑被黑客攻击了,首先要检查注册表的"Run"子项.查找在这些子项中是否加载了陌生的程序. 攻击者可以利用"Run"子项启动恶意程序,还有可能通过这些子项启动病毒如下: HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunOnce HKEY_LOCAL_MACHINESO

JAVA+Mysql程序,想在Mysql的一张表中让数据库自动生成一个字段的Icq号

问题描述 JAVA+Mysql程序,想在Mysql的一张表中让数据库自动生成一个字段的Icq号 我想做个聊天系统,想在Mysql的一张注册表中,加入注册信息后,让数据库自动生成一个Icq号.好像我们的QQ账号似的.简单的只要能实现就行.我新手. 解决方案 添加一个字段,设置为int或bigint类型,在设置主键自增长(AUTO_INCREMENT ). 解决方案二: 添加一个字段,设置为int 主键 自动增长就可以了. 解决方案三: 数据库增加一列,设置为标识列,有种子和增量. 解决方案四: 可

注册表中存储数据库链接字符串的方法_实用技巧

数据库的链接字符串是用数据库开发所必须的信息,我们通过链接字符串连接数据库,并进行各种数据库操作.那么链接字符串的存到哪里好呢?这没有什么定论,Asp系统开发中,一般存在一个conn.asp包含文件中或者如果又是COM,可能还会封闭到COM中,.Net开发中,大多数都选择存在Web.conifg中,也有人存储在另外一个单独的文件中.那么本文提供的是把数据库链接信息存储到注册表中的方案.也许你要问为什么要存到注册表呢?我想最起码的好处是安全,注册表的访问权限很高,一般远程服务在没有得到管理员账号的

在注册表中删除MSSQL无用的数据库注册

数据|数据库|注册表 开发人员经常在MSSQL企业管理器中注册远程的MSSQL服务器,直接在企业管理器中删除这些远程的MSSQL注册挺痛苦的,其实是可以在注册表中直接删除的. 找到HKEY_CURRENT_USER oftware\Microsoft\Microsoft SQL Server\80\Tools QLEW\Registered Servers X QL Server Group,里面每一项分别对应一个数据库注册表项,直接删除即可.

Visual C#来删除注册表中的注册信息

visual|注册表 在<用Visual C#读取注册信息>的文中,已经介绍了用 Visual C#来读取注册表中的注册信息.本文就来介绍用Visual C#对注册表的另外一个操作,这也是一个具有破坏性的操作过程--删除注册信息. 在上文中已经知道,由于Visual C#本身没有带类库,他对注册表的处理过程是通过调用.Net FrameWork SDK中的名称空间Microsoft.Win32中封装的二个类来实现的.这二个类就是Registry类.RegistryKey类.在 Registry

如何在注册表中存储加密的连接字符串

加密|注册表|字符串 目标本章的目标是: • 在注册表中存储加密的数据库连接字符串 • 从注册表中读取加密的数据库连接字符串并对其进行解密. 返回页首适用范围本章适用于以下产品和技术: • Microsoft Windows XP 或 Windows 2000 Server (Service Pack 3) 以及更高版本的操作系统 • Microsoft .net Framework 版本 1.0 (Service Pack 2) 以及更高版本 • Microsoft Visual C# .ne