检测客户pc电脑端VC++环境并安装

CefSharp 是一个非常不错的cef封装。但它依赖于VC++环境。

具体如下:

BranchCEF VersionVC++ Version.Net VersionStatus
master320220134.5.2Development
cefsharp/62320220134.5.2Pre-Release
cefsharp/57298720134.5.2Release
cefsharp/55288320134.5.2Unsupported
cefsharp/53278520134.5.2Unsupported
cefsharp/51270420134.5.2Unsupported
cefsharp/49262320134.0Unsupported
cefsharp/47252620134.0Unsupported
cefsharp/45245420134.0Unsupported
cefsharp/43235720124.0Unsupported
cefsharp/41227220124.0Unsupported
cefsharp/39217120124.0Unsupported
cefsharp/37206220124.0Unsupported
 

于是我们在初始化cef前需要先检测vc++环境情况。

通过检测注册表方式,具体实现代码如下:

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
public  static  bool  IsInstallVc2013x86()
        {
            try
            {
                Microsoft.Win32.RegistryKey uninstallNode = Microsoft.Win32.Registry.LocalMachine.OpenSubKey( @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" );
 
                foreach  ( string  subKeyName  in  uninstallNode.GetSubKeyNames())
                {
                    Microsoft.Win32.RegistryKey subKey = uninstallNode.OpenSubKey(subKeyName);
                    object  BundleProviderKey = subKey.GetValue( "BundleProviderKey" );
                    if  (BundleProviderKey !=  null )
                    {
                        //HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{ 5e4b593b - ca3c - 429c - bc49 - b51cbf46e72a}
                        //HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{13A4EE12-23EA-3371-91EE-EFB36DDFFF3E} 中文版本
                        if  (BundleProviderKey.ToString() ==  "{5e4b593b-ca3c-429c-bc49-b51cbf46e72a}" )
                        {
                            return  true ;
                            // MessageBox.Show(displayName.ToString());  
                        }
                        //if (BundleProviderKey.ToString() == "{f65db027-aff3-4070-886a-0d87064aabb1}")  英文版
                        //{
                        //    return true;
                        //    // MessageBox.Show(displayName.ToString());  
                        //}
                    }
                }
            }
            catch  (Exception ex)
            {
 
                //LogTextHelper.Error(ex);
            }
 
            return  false ;
        }

  

当为检测到未安装时,提示用户安装。

用户选择确认后,以管理员方式执行安装文件。

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
private  static  bool  InitVc2013x86()
{
     try
     {
         if  (!IsInstallVc2013x86())
         {
             //http://www.microsoft.com/zh-cn/download/details.aspx?id=40784
 
             //LogTextHelper.Error("系统未安装Vc2013x86组件");
 
             Splasher.Show( typeof (frmSysSplash));
 
             Splasher.Status =  string .Format( "首次使用,正在检测系统组件..." );
             System.Threading.Thread.Sleep(10000);
 
             Splasher.Close();
 
             MessageUtil.ShowTips( "检测到您的机器未安装Microsoft Visual C++ 2013运行组件,系统将为您自动安装。" );
 
             Splasher.Show( typeof (frmSysSplash));
             Splasher.Status =  string .Format( "正在安装系统组件,请耐心等待..." );
 
 
             int  duration = 10000;
             System.Diagnostics.Stopwatch stopwatch =  new  System.Diagnostics.Stopwatch();
             stopwatch.Start();  //  开始监视代码运行时间
             string  installMessage =  string .Empty;
             bool  installSucces = InstallVc2013x86( out  installMessage);
             stopwatch.Stop();  //  停止监视
             if  (installSucces) //安装成功
             {
                 if  (stopwatch.Elapsed.TotalMilliseconds < duration)
                 {
                     int  total = duration - ( int )stopwatch.Elapsed.TotalMilliseconds;
                     int  step = 30;
                     while  ( true )
                     {
                         System.Threading.Thread.Sleep(200);
                         Splasher.Status =  string .Format( "当前进度{0}%..." , 100 * step / total);
                         step += 200;
                         if  (step > total)
                         {
                             break ;
                         }
                     }
                 }
 
                 Splasher.Status =  string .Format( "操作完成!正在验证安装..." );
                 System.Threading.Thread.Sleep(3000);
                 Splasher.Close();
 
                 if  (!IsInstallVc2013x86()) //校验安装
                 {
                     if  (MessageBox.Show( "自动安装失败!您可以尝试以管理员身份重新打开或从以下网站手动下载安装。(http://www.microsoft.com/zh-cn/download/details.aspx?id=40784)" "提示" , MessageBoxButtons.YesNo) == DialogResult.Yes)
                     {
                         System.Diagnostics.Process.Start( "http://www.microsoft.com/zh-cn/download/details.aspx?id=40784" );
                     }
                     return  false ;
                 }
                 return  true ;
             }
             else
             {
                 Splasher.Close();
                 MessageUtil.ShowTips(installMessage);
                 return  false ;
             }
         }
 
         //LogTextHelper.Error("已安装环境");
         return  true ;
     }
     catch  (Exception ex)
     {
         //LogTextHelper.Error(ex);
     }
     return  false ;
}
 
 
public  static  bool  InstallVc2013x86( out  string  message)
{
     message =  string .Empty;
     string  fileName = System.IO.Path.Combine(Application.StartupPath,  "vcredist_x86\\vcredist_x86.exe" );
     if  (!System.IO.File.Exists(fileName))
     {
         //LogTextHelper.Info("未找到文件 " + fileName);
         message =  "未找到文件"  + fileName;
         return  false ;
     }
 
     /**
   * 当前用户是管理员的时候,直接启动应用程序
   * 如果不是管理员,则使用启动对象启动程序,以确保使用管理员身份运行
   */
     //获得当前登录的Windows用户标示
     System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
     System.Security.Principal.WindowsPrincipal principal =  new  System.Security.Principal.WindowsPrincipal(identity);
 
     //LogTextHelper.Info("开始安装 InstallVc2013x86");
     //判断当前登录用户是否为管理员
     if  (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator))
     {
         //LogTextHelper.Info("当前身份为管理员");
         //LogTextHelper.Info("管理员方式运行");
         //LogTextHelper.Info("开始安装 InstallVc2013x86");
         System.Diagnostics.Process.Start(fileName).WaitForExit();
     }
     else
     {
         //LogTextHelper.Info("管理员方式运行");
         //LogTextHelper.Info("开始安装 InstallVc2013x86");
         //创建启动对象
         System.Diagnostics.ProcessStartInfo startInfo =  new  System.Diagnostics.ProcessStartInfo();
         //设置运行文件
         startInfo.FileName = fileName;
         //设置启动参数
         //startInfo.Arguments = String.Join(" ", Args);
         //设置启动动作,确保以管理员身份运行
         startInfo.Verb =  "runas" ;
         //如果不是管理员,则启动UAC
 
         System.Diagnostics.Process.Start(startInfo).WaitForExit();
     }
     return  true ;
}

  

应用程序入口:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static  void  Main()
{
     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault( false );
 
     InitPlugins();
     if  (!InitVc2013x86())
     {
         return ;
     }
     if  (!InitCef())
     {
         MessageUtil.ShowError( "主界面初始化失败!" );
         return ;
     }
     Application.Run( new  FrmFirst());
}

  

 

附录vc++各版本 检查方法:

 

Visual C++ 2005

Microsoft Visual C++ 2005 Redistributable (x64) Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182 Configuration: x64 Version: 6.0.2900.2180

Direct Download URL: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE

Microsoft Visual C++ 2005 Redistributable (x86) Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a Configuration: x86 Version: 6.0.2900.2180

Direct Download URL: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE


Visual C++ 2008

Microsoft Visual C++ 2008 Redistributable (x64) Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\67D6ECF5CD5FBA732B8B22BAC8DE1B4D Configuration: x64 Version: 9.0.30729.5677

Direct Download URL: https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe

Microsoft Visual C++ 2008 Redistributable (x86) Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\6E815EB96CCE9A53884E7857C57002F0 Configuration: x86 Version: 9.0.30729.5677

Direct Download URL: https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe


Visual C++ 2010

Microsoft Visual C++ 2010 Redistributable (x64) Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1926E8D15D0BCE53481466615F760A7F Configuration: x64 Version: 10.0.40219.325

Direct Download URL: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe

Microsoft Visual C++ 2010 Redistributable (x86) Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1D5E3C0FEDA1E123187686FED06E995A Configuration: x86 Version: 10.0.40219.325

Direct Download URL: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe


Visual C++ 2012

Microsoft Visual C++ 2012 Redistributable (x64) Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{ca67548a-5ebe-413a-b50c-4b9ceb6d66c6} Configuration: x64 Version: 11.0.61030.0

Direct Download URL: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe

Microsoft Visual C++ 2012 Redistributable (x86) Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f} Configuration: x86 Version: 11.0.61030.0

Direct Download URL: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe


Visual C++ 2013

Microsoft Visual C++ 2013 Redistributable (x64) Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{050d4fc8-5d48-4b8f-8972-47c82c46020f} Configuration: x64 Version: 12.0.30501.0

Direct Download URL: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe

Microsoft Visual C++ 2013 Redistributable (x86) Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{f65db027-aff3-4070-886a-0d87064aabb1} Configuration: x86 Version: 12.0.30501.0

Direct Download URL: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe


Visual C++ 2015

Microsoft Visual C++ 2015 Redistributable (x64) - 14.0.24215 Registry Key: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\{d992c12e-cab2-426f-bde3-fb8c53950b0d} Configuration: x64 Version: 14.0.24215.1

Direct Download URL: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe

Microsoft Visual C++ 2015 Redistributable (x86) - 14.0.24215 Registry Key: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\{e2803110-78b3-4664-a479-3611a381656a} Configuration: x86 Version: 14.0.24215.1

Direct Download URL: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe


Visual C++ 2017

Caveat: There's either a new 2017 registry convention being used, or it hasn't been finalized, yet. As I'm guessing the upper-most keys of: [HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle] and [HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]

are subject to change, or at least have different nested GUIDs, I'm going to use list the key that ends with a GUID.

Microsoft Visual C++ 2017 Redistributable (x64) - 14.11.25325 Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle\Dependents\{6c6356fe-cbfa-4944-9bed-a9e99f45cb7a}] Configuration: x64 Version: 14.11.25325.0

Direct Download URL: https://download.visualstudio.microsoft.com/download/pr/11100230/15ccb3f02745c7b206ad10373cbca89b/VC_redist.x64.exe

Microsoft Visual C++ 2017 Redistributable (x86) - 14.11.25325 Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{404c9c27-8377-4fd1-b607-7ca635db4e49}] Configuration: x86 Version: 14.11.25325.0

Direct Download URL: https://download.visualstudio.microsoft.com/download/pr/11100229/78c1e864d806e36f6035d80a0e80399e/VC_redist.x86.exe


Changelog
September 8th, 2017 -- Added 2017's version for 14.11.25325.0 as the new Visual C++ 2017 entry 
April 7th, 2017 -- Added for 2017's version of 14.10.25008.0 as the new Visual C++ 2017 entry 
October 24th, 2016 -- Updated for 2015's version info for 14.0.24215.1 
August 18th, 2016 -- Updated 2015's version info for 14.0.24212 
May 27th, 2016 -- Updated info for MSVC2015 Update 2 

转载于:https://www.cnblogs.com/DoNetCShap/p/9547025.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值