C#winform检测电脑安装的.netframework版本和是否安装了某软件
代码如下:
//C#获取已安装 .NET Framework 版本
private static string[] GetDotNetVersions()
{
DirectoryInfo[] directories = new DirectoryInfo(
Environment.SystemDirectory + @"\..\Microsoft.NET\Framework").GetDirectories("v?.?.*");
ArrayList list = new ArrayList();
foreach (DirectoryInfo info2 in directories)
{
list.Add(info2.Name.Substring(1));
}
return (list.ToArray(typeof(string)) as string[]);
} /// <summary>
/// 确认电脑上是否安装有某个程序
/// </summary>
/// <param name="softWareName">程序安装后的名称</param>
/// <returns>true: 有安裝, false:沒有安裝</returns>
private static bool CheckSoftWartInstallState(string softWareName = "Adobe Reader")
{
Microsoft.Win32.RegistryKey uninstallNode =
Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.ReadKey);
foreach (string subKeyName in uninstallNode.GetSubKeyNames())
{
Microsoft.Win32.RegistryKey subKey = uninstallNode.OpenSubKey(subKeyName);
object displayName = subKey.GetValue("DisplayName");
if (displayName != null)
{
if (displayName.ToString().Contains(softWareName))
{
return true;
// MessageBox.Show(displayName.ToString());
}
}
}
return false;
} /// <summary>
/// 程序运行前检测
/// </summary>
public static void ApplicationBeforeRunCheck()
{
string[] deviceName = { "PL-2303 USB-to-Serial",
"Microsoft ReportViewer 2010 Redistributable",
"二代证读写机具USB驱动"};
string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
string[] netList = GetDotNetVersions();
bool dotNetIsOk = false;
for (int i = 0; i < netList.Length; i++)
{
if (netList[i][0] == 4)
dotNetIsOk = true;
}
if (!dotNetIsOk)
{
Process.Start(Path.Combine(baseDirectory, "4.exe"));
while (true)
{
for (int i = 0; i < netList.Length; i++)
if (netList[i][0] == 4) break;
Thread.Sleep(1000);
}
}
for (int i = 0; i < deviceName.Length; i++)
{
if (!CheckSoftWartInstallState(deviceName[i]))
{
Process.Start(Path.Combine(baseDirectory, ((i + 1) + ".exe")));
while (true)
{
if (CheckSoftWartInstallState(deviceName[i]))
break;
Thread.Sleep(1000);
}
}
}
//软件安装完成
RegistryKey rk = Registry.LocalMachine;
RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
rk2.SetValue("jkytj", baseDirectory);
rk2.Close();
rk.Close();
//软件自启完成
}
C#winform检测电脑安装的.netframework版本和是否安装了某软件的更多相关文章
- 检测计算机已经安装的NetFramework版本(摘录)
/// /// 检测计算机已经安装的NetFramework版本 /// internal void GetVersionFromRegistry() { using (RegistryKey ndp ...
- linux 安装jdk 二进制版本,非安装版
0.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html选择对 ...
- C#的Installer生成的msi的安装文件,安装新版本时提示:已经安装了该产品的另一个版本。无法继续安装此版本
之前折腾了个C#的项目: WLW (Windows Live Writer) Plugin–InsertSkydriveFiles 然后又弄了个对应的Installer: [已解决]给一个C#的Dll ...
- 手把手告诉你如何安装多个版本的node,妈妈再也不用担心版本高低引发的一系列后遗症(非常详细,非常实用)
简介 最近好多人都问到node怎么同时安装多个版本? 如何配置node的环境变量,如何自如的在多个版本中切换node?还有就是自己在做appium自动化的时候,有时候会因为node的版本过高或者是太低 ...
- Mac下同时安装多个版本的JDK
JDK8 GA之后,小伙伴们喜大普奔,纷纷跃跃欲试,想体验一下Java8的Lambda等新特性,可是目前Java企业级应用的主打版本还是JDK6, JDK7.因此,我需要在我的电脑上同时有JDK8,J ...
- linux下依赖库的版本问题引起的安装失败:libssl-dev版本问题无法安装 :libssl-dev : 依赖: libssl1.0.0 (= 1.0.1-4ubuntu3) 但是 1.0.1-4ubuntu5.31 正要被安装
依赖库版本问题引起的安装失败解决方法如下有两种: 1.是由于源需要更新,如下操作: libssl-dev : 依赖: libssl0.9.8 (= 0.9.8o-1ubuntu4) 但是 0.9.8o ...
- 安装phantomjs(Ubuntu版本 MacOS版本)
安装phantomjs(Ubuntu版本) 首先:apt-get update # 更新软件列表. apt-get upgrade # 更新软件. 其次再执行如下步骤 步骤一下载包:wget http ...
- 安装corel x8提示你已安装了另外一个版本
如果之前安装了其他版本,提示安装不进去,需卸载visual c++ 2015 redistributable(x64)即可(测试环境是安装了x6后,x8安装不了) windows install cl ...
- 【从零开始搭建K8S】【第一篇】CentOS7.6离线安装Docker(手动安装以及基于yum本地源安装)
下载CentOS7.6以及最小化安装CentOS7.6版本.由于CentOS属于开源软件,在国内也有很多的mirror站点可供下载,我选择的是华为站点进行下载:http://mirrors.huawe ...
随机推荐
- AFNetworking 3.0的GET和POST的使用
POST: AFHTTPSessionManager *session = [AFHTTPSessionManager manager]; session.requestSerializer = [A ...
- 武汉科技大学ACM :1003: 零起点学算法78——牛牛
Problem Description 牛牛是一种纸牌游戏,总共5张牌,规则如下: 如果找不到3张牌的点数之和是10的倍数,则为没牛: 如果其中3张牌的点数之和是10的倍数,则为有牛,剩下两张牌的点数 ...
- An FPS counter.
本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/Unity_FPFCounter.html using UnityEngine; u ...
- Interview Algorithm
约瑟夫环: #include <stdio.h> #include <stdlib.h> #include <string.h> int find(int *arr ...
- Nginx常用Rewrite伪静态法则
信赖此刻大部门用Linux VPS的伴侣都在利用这个敏捷传布的Nginx,本日就清算一下最常见的PHP法式的Rewrite(伪静态法则). Wordpress: location / {index i ...
- PHP浮点数的一个常见问题的解答
作者: Laruence 本文地址: http://www.laruence.com/2013/03/26/2884.html 转载请注明出处 关于PHP的浮点数, 我之前写过一篇文章: 关于PHP浮 ...
- MongoDB insert/update/one2many案例
以博文与评论为例,博文有标题内容,对应多个评论,评论有评论人.评论内容等. ()插入一条博文: db.blog.insert( {','title':'this is blog title1','co ...
- ural 1020 Rope
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> # ...
- 如何禁止KEIL初始化RAM为零& 如何判断是软复位还是上电复位
(1)如何禁止KEIL初始化RAM为零? 1. 在KEIL Noinit 打钩 2. <1> 另须对需要热启动保持的变量用 _at_ 关键字指定某个区域,否则还是没用 <2>或 ...
- Delphi从内存流中判断图片格式(好多相关文章)
废话不多说了,利用内存流来判断文件的格式,其实判断文件的前几个字节就可以简单的判断这个文件是什么类型的文件,例如jpg文件 是 FFD8 (从低位到高位就要反过来 D8FF 下面都是一样)BMP文件 ...