外部环境数据
1.需要管理员权限
2.需要安装office2003以上完整版
3.需要安装flash reader 10.0以上
4.需要安装adodb reader;Adobe Acrobat X Pro; 8.0以上

代码比较差,仅供学习、参考

/// <summary>
/// 外部环境数据
/// 1.需要管理员权限
/// 2.需要安装office2003以上完整版
/// 3.需要安装flash reader 10.0以上
/// 4.需要安装adodb reader;Adobe Acrobat X Pro; 8.0以上
/// </summary>
public class GlobalEnvironment
{
private GlobalEnvironment()
{ } private static GlobalEnvironment _instance = new GlobalEnvironment();
public static GlobalEnvironment Instance
{
get { return _instance; }
} /// <summary>
/// 异步启动
/// </summary>
public void StartAsyc()
{
InitialTokeSource();
ExecuteTasck(StartTask);
} private void StartTask()
{
log4net.ILog _logger = log4net.LogManager.GetLogger("GlobalEnvironment");
try
{
StringBuilder sb = new StringBuilder();
SetAdminInfo(sb);
SetOfficeInfo(sb);
SetPDFInfo(sb);
SetFlashInfo(sb);
SetSystemInfo(sb);
SetDriverInfo(sb);
SetAssemblyVersionInfo(sb); _logger.FatalFormat(" 系统环境-{0}", sb.ToString());
}
catch (Exception ex)
{
_logger.ErrorFormat(" 读取系统环境错误-{0}", ex.Message);
} } #region AssemblyVersionInfo private void SetAssemblyVersionInfo(StringBuilder sb)
{
sb.AppendFormat(" >>程序集信息- ");
ProductPrj prj = new ProductPrj();
PrintStringFormat(sb, " 产品名称{0},项目名称:{1},版本号:{2}", Enum.GetName(typeof(ProductType), prj.ProductType)
, Enum.GetName(typeof(BranchType), prj.BranchType)
, prj.Version);
}
#endregion #region DirverInfo
private void SetDriverInfo(StringBuilder sb)
{
sb.AppendFormat(" >>硬盘信息- ");
string exePath = AppDomain.CurrentDomain.BaseDirectory;
DriveInfo driver = DriveInfo.GetDrives().FirstOrDefault(d => exePath.StartsWith(d.Name)); StringBuilder sbDriver = new StringBuilder();
if (driver != null)
{
sbDriver.AppendFormat("Drive {0}; ", driver.Name);
sbDriver.AppendFormat(" File type: {0}; ", driver.DriveType);
if (driver.IsReady == true)
{
sbDriver.AppendFormat(" 驱动器的卷标: {0}; ", driver.VolumeLabel);
sbDriver.AppendFormat(" 文件系统的名称: {0}; ", driver.DriveFormat);
sbDriver.AppendFormat(" 可用空闲空间总量:{0:N} bytes; ", driver.TotalFreeSpace);
sbDriver.AppendFormat(" 存储空间的总大小:{0:N} bytes; ", driver.TotalSize);
} } PrintStringFormat(sb, @" >>应用程序执行路径{0},{1} ", exePath, sbDriver.ToString());
}
#endregion #region SystemInfo
private void SetSystemInfo(StringBuilder sb)
{
sb.AppendFormat(" >>系统信息- ");
const int nChars = ;
string flag = "$";
StringBuilder Buff = new StringBuilder(nChars);
GetWindowsDirectory(Buff, nChars);
sb.AppendFormat(" Windows路径:{0}; ", Buff.ToString());
GetSystemDirectory(Buff, nChars);
sb.AppendFormat(" 系统路径:{0}; ", Buff.ToString());
sb.AppendFormat(" 系统版本:{0}; ", GetOSType());
sb.AppendFormat(" 计算机的名称:{0}; ", Environment.MachineName);
sb.AppendFormat(" 当前系统是否为 64 位系统:{0}; ", Environment.Is64BitOperatingSystem);
sb.AppendFormat(" 当前进程是否为 64 位进程:{0}; ", Environment.Is64BitProcess); sb.AppendFormat(" >>cpu信息- ");
///调用GetSystemInfo函数获取CPU的相关信息
CPU_INFO CpuInfo;
CpuInfo = new CPU_INFO();
GetSystemInfo(ref CpuInfo);
sb.AppendFormat(" 逻辑处理器{0}个; ", CpuInfo.dwNumberOfProcessors.ToString());
sb.AppendFormat(" CPU的类型为{0}; ", CpuInfo.dwProcessorType.ToString());
sb.AppendFormat(" CPU的速度为{0}GHz; ", CPUSpeed().ToString()); sb.AppendFormat(" >>内存信息- ");
///调用GlobalMemoryStatus函数获取内存的相关信息
MEMORY_INFO MemInfo;
MemInfo = new MEMORY_INFO();
GlobalMemoryStatus(ref MemInfo);
sb.AppendFormat(" 已经使用内存大小{0:N}%; ", MemInfo.dwMemoryLoad);
sb.AppendFormat(" 可用交换文件大小有{0:N}字节; ", MemInfo.dwAvailPageFile);
sb.AppendFormat(" 可使用的物理内存有{0:N}字节; ", MemInfo.dwAvailPhys);
sb.AppendFormat(" 可使用的虚拟内存有{0:N}字节; ", MemInfo.dwAvailVirtual);
sb.AppendFormat(" 交换文件总大小为{0:N}字节; ", MemInfo.dwTotalPageFile);
sb.AppendFormat(" 物理内存共有{0:N}字节; ", MemInfo.dwTotalPhys);
sb.AppendFormat(" 虚拟内存共有{0:N}字节; ", MemInfo.dwTotalVirtual);
sb.Replace(flag, MemInfo.dwLength.ToString()); } public float CPUSpeed()
{
ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'");
uint sp = (uint)(Mo["CurrentClockSpeed"]);
Mo.Dispose();
return Convert.ToSingle(sp) / ;
} public static string GetOSType()
{
//定义系统版本
Version ver = System.Environment.OSVersion.Version;
string OSType = "";
//Major主版本号
//Minor副版本号
if (ver.Major == && ver.Minor == )
{
OSType = " Windows 2000 ";
}
else if (ver.Major == && ver.Minor == )
{
OSType = " Windows XP ";
}
else if (ver.Major == && ver.Minor == )
{
OSType = " Windows 2003/Windows XP 64-Bit Edition/Windows Server 2003 R2 ";
}
else if (ver.Major == && ver.Minor == )
{
OSType = " Windows Vista/Windows Server 2008 ";
}
else if (ver.Major == && ver.Minor == )
{
OSType = " Windows7/Windows Server 2008 R2 ";
}
else if (ver.Major == && ver.Minor == )
{
OSType = " Windows8/Windows Server 2012 ";
}
else if (ver.Major == && ver.Minor == )
{
OSType = " Windows8.1/Windows Server 2012 R2 ";
}
else
{
OSType = string.Format("未知:major:{0},minor{1}", ver.Major, ver.Minor);
}
return OSType;
} [DllImport("kernel32")]
public static extern void GetWindowsDirectory(StringBuilder WinDir, int count);
[DllImport("kernel32")]
public static extern void GetSystemDirectory(StringBuilder SysDir, int count);
[DllImport("kernel32")]
public static extern void GetSystemInfo(ref CPU_INFO cpuinfo);
[DllImport("kernel32")]
public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo);
[DllImport("kernel32")]
public static extern void GetSystemTime(ref SYSTEMTIME_INFO stinfo);
//定义CPU的信息结构
[StructLayout(LayoutKind.Sequential)]
public struct CPU_INFO
{
public uint dwOemId;
public uint dwPageSize;
public uint lpMinimumApplicationAddress;
public uint lpMaximumApplicationAddress;
public uint dwActiveProcessorMask;
public uint dwNumberOfProcessors;
public uint dwProcessorType;
public uint dwAllocationGranularity;
public uint dwProcessorLevel;
public uint dwProcessorRevision;
}
//定义内存的信息结构
[StructLayout(LayoutKind.Sequential)]
public struct MEMORY_INFO
{
public uint dwLength;
public uint dwMemoryLoad;
public uint dwTotalPhys;
public uint dwAvailPhys;
public uint dwTotalPageFile;
public uint dwAvailPageFile;
public uint dwTotalVirtual;
public uint dwAvailVirtual;
}
//定义系统时间的信息结构
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEMTIME_INFO
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
#endregion #region IsAdministrator
public void SetAdminInfo(StringBuilder sb)
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
this.IsAdministrator = principal.IsInRole(WindowsBuiltInRole.Administrator); PrintStringFormat(sb, "admin: {0}", this.IsAdministrator ? "管理员" : "非管理员");
} public bool IsAdministrator { get; private set; }
#endregion #region office
private const string RegOfficeKey = @"Software\Microsoft\Windows\Shell\AttachmentExecute\{0002DF01-0000-0000-C000-000000000046}";
private void SetOfficeInfo(StringBuilder sb)
{
string wordVersion = "";
string excelVersion = "";
string pptVersion = ""; if (IsAdministrator)
{
wordVersion = GetMajorVersion(RegisterValue("winword.exe"));
excelVersion = GetMajorVersion(RegisterValue("excel.exe"));
pptVersion = GetMajorVersion(RegisterValue("powerpnt.exe"));
} this.WordEable = wordVersion == "" ? false : true;
this.ExcelEable = excelVersion == "" ? false : true;
this.PPTEable = pptVersion == "" ? false : true; PrintStringFormat(sb, "word: {0}", wordVersion);
PrintStringFormat(sb, "excel: {0}", excelVersion);
PrintStringFormat(sb, "ppt: {0}", pptVersion);
} private string GetMajorVersion(string _path)
{
string toReturn = "";
if (File.Exists(_path))
{
try
{
FileVersionInfo _fileVersion = FileVersionInfo.GetVersionInfo(_path);
toReturn = _fileVersion.FileMajorPart.ToString();
}
catch
{ }
}
return toReturn;
}
#endregion #region pdf
private void SetPDFInfo(StringBuilder sb)
{
string path = RegisterValue("AcroRd32.exe");
if (string.IsNullOrEmpty(path)) path = RegisterValue("AcroDist.exe");
PrintStringFormat(sb, "pdf: {0}", path); this.PdfEable = path == "" ? false : true;
}
#endregion #region flash
private void SetFlashInfo(StringBuilder sb)
{
string version = "";
version = GetAppVersion("ShockwaveFlash.ShockwaveFlash", (t, o) =>
{
return o.GetType().InvokeMember("GetVariable", BindingFlags.InvokeMethod,
null, o, new object[] { "$version" }).ToString();
});
PrintStringFormat(sb, "flash player: {0}", version); if (version != "")
{
version = version.Replace("WIN", "").Trim();
string[] va = version.Split(',');
int v1 = ;
if (va.Length > )
{
int.TryParse(va[], out v1);
}
if (v1 > )
this.SwfEnable = true;
} }
#endregion #region taskecancel
private CancellationTokenSource _tokenSource; private void InitialTokeSource()
{
_tokenSource = new CancellationTokenSource();
} private void CancelTokeSource()
{
_tokenSource.Cancel();
} private void ExecuteTasck(Action function)
{
TaskFactory taskFactory = new TaskFactory();
CancellationToken token = _tokenSource.Token; taskFactory.StartNew(() =>
{
if (token.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();//强制取消 并不会让TaskTest1停止执行
}
function();
}, token);
} private Task<TResult> ExecuteTasck<TResult>(Func<TResult> function)
{
TaskFactory taskFactory = new TaskFactory();
CancellationToken token = _tokenSource.Token; return taskFactory.StartNew<TResult>(() =>
{
if (token.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();//强制取消 并不会让TaskTest1停止执行
}
return function();
}, token);
} private Task<TResult> ExecuteTasck<TResult>(Func<object, TResult> function, object param)
{
TaskFactory taskFactory = new TaskFactory();
CancellationToken token = _tokenSource.Token; return taskFactory.StartNew<TResult>((p) =>
{
if (token.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();//强制取消 并不会让TaskTest1停止执行
}
return function(p);
}, param, token);
}
#endregion #region register
private const string RegKey = @"Software\Microsoft\Windows\CurrentVersion\App Paths";
private string RegisterValue(string _key)
{
string path = "";
RegistryKey _mainKey = Registry.CurrentUser;
try
{
_mainKey = _mainKey.OpenSubKey(RegKey + "\\" + _key, false);
if (_mainKey != null)
{
path = _mainKey.GetValue(string.Empty).ToString();
}
}
catch
{ } //if not found, looks inside LOCAL_MACHINE:
_mainKey = Registry.LocalMachine;
if (string.IsNullOrEmpty(path))
{
try
{
_mainKey = _mainKey.OpenSubKey(RegKey + "\\" + _key, false);
if (_mainKey != null)
{
path = _mainKey.GetValue(string.Empty).ToString();
}
}
catch
{
}
} if (_mainKey != null)
_mainKey.Close();
return path;
}
#endregion #region version
private string GetAppVersion(string progid, Func<Type, object, string> getVersionMethod)
{
try
{
Type type = Type.GetTypeFromProgID(progid);
if (type != null)
{
dynamic obj = Activator.CreateInstance(type);
var versionString = getVersionMethod(type, obj); if (progid == "Word.Application") obj.Quit(false);
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
return versionString;
}
}
catch (Exception ex)
{
}
return "";
}
#endregion #region print
private void PrintStringFormat(StringBuilder sb, string v, params string[] p)
{
sb.AppendFormat(v, p);
sb.Append(" ; ");
}
#endregion #region enable
public bool WordEable { get; private set; }
public bool ExcelEable { get; private set; }
public bool PPTEable { get; private set; }
public bool PdfEable { get; set; }
public bool SwfEnable { get; private set; } ///// <summary>
/////检测资源控件是否可用
///// </summary>
///// <param name="func"></param>
//public void ResCheckEnable(Func<Tuple<bool, bool, bool, bool, bool>> func)
//{
// ExecuteTasck(() => {
// Tuple<bool, bool, bool, bool, bool> tuple = func();
// WordEable = tuple.Item1;
// ExcelEable = tuple.Item2;
// PPTEable = tuple.Item3;
// PdfEable = tuple.Item4;
// SwfEnable = tuple.Item5;
// });
//} #endregion }

C#:获取环境信息的更多相关文章

  1. golang 获取环境信息

    os.Environ() os.Getenv("TMP")

  2. .NET Core 获取程序运行环境信息与反射的应用

    目录 RuntimeInformation.Environment 获取信息 反射获取信息 获取某个属性的值以及别名 反射获取信息 使用 总结 笔者的九篇反射系统文章已经完结,但是笔者会持续更新反射在 ...

  3. JDK7和JDK8一些重要新特性

    jdk7新特性(部分) switch支持字符串 List AutoCloseable接口实现自动关闭,在try()中 新增获取环境信息的工具方法,getJavaHomeDir,getUserHomeD ...

  4. python网络编程【四】(域名系统)

    域名系统(DNS)是一个分布式的数据库,它主要用来把主机名转换成IP地址.DNS以及相关系统之所以存在,主要有以下两个原因: (1).它们可以使人们比较容易地记住名字. (2).它允许服务器改变IP地 ...

  5. PHP内核学习(一)SAPI

    学习PHP-src之前,我准备了一份源文件: GitHub下载->https://github.com/helingfeng/php-src 简单分析一下源码的目录结构: 1. root根目录下 ...

  6. ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第二章 ASM instance(1)

    第二章  ASM INSTANCE ASM的类型,例如可以: 10g后ORACLE instance 类型增加了一个ASM种类.参数INSTANCE_TYPE=ASM进行设置. ASM实例启动命令: ...

  7. Web Builder

    Web Builder http://www.doc88.com/p-1748774598960.html 初次接触Infopath,我就被它的强大的功能,灵活的表单制作方式,全面对Web Servi ...

  8. 【Spring源码分析】非懒加载的单例Bean初始化前后的一些操作

    前言 之前两篇文章[Spring源码分析]非懒加载的单例Bean初始化过程(上篇)和[Spring源码分析]非懒加载的单例Bean初始化过程(下篇)比较详细地分析了非懒加载的单例Bean的初始化过程, ...

  9. ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse

    ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse 书中,大部分出现hydro的地方,直接替换为indigo或ja ...

随机推荐

  1. NorthWind 数据库整体关系

    http://blog.csdn.net/bergn/article/details/1502150 今天看到一张非常有用的图,说明有关Northwind数据库整体关系的图,以前一直在用,但是没有一个 ...

  2. JDK环境变量设置

    1,新建JAVA_HOME变量 .  E:\TOOLS\JAVA\JDK1.8.0_111 2,新建CLASSPATH变量 . .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\to ...

  3. Maven 集成Tomcat插件

    转自:https://my.oschina.net/lilw/blog/168667 Maven Tomcat 插件现在主要有两个版本,tomcat-maven-plugin和tomcat7-mave ...

  4. mysql实现分组和组内序号

    SELECT CASE WHEN @mid = t.PAY_TIME THEN ELSE END SEQ, @mid := t.PAY_TIME, t.AMOUNTS, t.CHARGE_PRICE, ...

  5. Java多线程之this与Thread.currentThread()的区别——java多线程编程核心技术

      package mythread; public class CountOperate extends Thread{ public CountOperate(){ System.out.prin ...

  6. linux下安装svn server

    1. yum install subversion 2. mkdir -p /home/svn/svnfile 3. svnadmin create /home/svn/svnfile 4. 进入co ...

  7. shell 条件判断

    一.数值判断 INT1 -eq INT2           INT1和INT2两数相等为真 INT1 -ne INT2           INT1和INT2两数不等为真 INT1 -gt INT2 ...

  8. ORM系列之二:EF(3) 数据库连接

    目录 1.前言 2.Code First默认连接 3.Code First指定数据库 4.自定义连接 前言 在介绍EF的Code First模式时候,我们没有修改任何配置,运行之后自动在LocalDb ...

  9. Swift:闭包

    一.闭包的介绍 闭包表达式(Closure Expressions) 尾随闭包(Trailing Closures) 值捕获(Capturing Values) 闭包是引用类型(Closures Ar ...

  10. 第一篇:白话tornado源码之一个脚本引发的血案

    本系列博文计划: 1.剖析基于Python的Web框架Tornado的源码 2.为Python开发一个完善的MVC框架 首先将带着大家一起来剖析基于python编写的Web框架 tornado ,本着 ...