zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    用存储过程实现二进制字段的更新
    在Google 上搜书的方法 (转)
    Oracle开发中,关于查询的一个问题
    北京公司招聘 .net开发人员
    UIAlertView的使用方法
    FMEFB开始上传
    应用中的安全管理方案
    使用NHibernate时需要考虑的另一个问题
    .net使用Com组件的问题
    使用NHibernate时,如何提高访问Oracle数据库(ODP.net)的性能
  • 原文地址:https://www.cnblogs.com/liulun/p/1627313.html
Copyright © 2011-2022 走看看