[代码]获取系统安装的MS Offfice信息(是否安装、版本、安装路径)

龙宜坡 2009-04-13 06:40:43
N久么发过贴,冒个泡,发个代码,不妥之处请指正!
参考了高手用VB6.0写的

using System;
using System.Collections.Generic;
using System.Text;

namespace WpsTest
{
public class OfficeOperator
{
#region 方法

#region public static
/// <summary>
/// 检测MS-Office是否正确安装
/// 通过注册表检测
/// </summary>
/// <param name="version">获得安装的版本号,如office2000,office2003,office2007</param>
/// <returns></returns>
public static bool IsInstall(out string Version)
{
bool result = false;
string officePath = "";
string officeVersion = "";

Version = "";
GetOfficePath(out officePath, out officeVersion);

if (!string.IsNullOrEmpty(officeVersion) && !string.IsNullOrEmpty(officePath))
{
result = true;
Version = officeVersion;
}

return result;
}

/// <summary>
/// 获取当前某个版本Office的安装路径
/// </summary>
/// <param name="Path">返回当前系统Office安装路径</param>
/// <param name="Version">返回当前系统Office版本信息</param>
public static void GetOfficePath(out string Path,out string Version)
{
string strPathResult = "";
string strVersionResult = "";
string strKeyName = "Path";
object objResult = null;
Microsoft.Win32.RegistryValueKind regValueKind;
Microsoft.Win32.RegistryKey regKey = null;
Microsoft.Win32.RegistryKey regSubKey = null;

try
{
regKey = Microsoft.Win32.Registry.LocalMachine;

if (regSubKey == null)
{//office97
regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\8.0\Common\InstallRoot", false);
strVersionResult = "office97";
strKeyName = "OfficeBin";
}

if (regSubKey == null)
{//Office2000
regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\9.0\Common\InstallRoot", false);
strVersionResult = "office2000";
strKeyName = "Path";
}

if (regSubKey == null)
{//officeXp
regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\10.0\Common\InstallRoot", false);
strVersionResult = "officeXP";
strKeyName = "Path";
}

if (regSubKey == null)
{//Office2003
regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\11.0\Common\InstallRoot", false);
strVersionResult = "office2003";
strKeyName = "Path";
}

if (regSubKey == null)
{//office2007
regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\12.0\Common\InstallRoot", false);
strVersionResult = "office2007";
strKeyName = "Path";
}

objResult = regSubKey.GetValue(strKeyName);
regValueKind = regSubKey.GetValueKind(strKeyName);
if (regValueKind == Microsoft.Win32.RegistryValueKind.String)
{
strPathResult = objResult.ToString();
}
}
catch (System.Security.SecurityException ex)
{
throw new System.Security.SecurityException("您没有读取注册表的权限", ex);
}
catch (Exception ex)
{
throw new Exception("读取注册表出错!", ex);
}
finally
{

if (regKey != null)
{
regKey.Close();
regKey = null;
}

if (regSubKey != null)
{
regSubKey.Close();
regSubKey = null;
}
}

Path = strPathResult;
Version = strVersionResult;
}
#endregion public static

#endregion 方法
}
}


以下是使用

        private void btnGetOfficePath_Click(object sender, EventArgs e)
{
string officePath = "";
string officeVersion = "";
try
{
OfficeOperator.GetOfficePath(out officePath,out officeVersion);
}
catch (Exception ex)
{
MessageBox.Show("无法获取系统Office信息");
}
if (!string.IsNullOrEmpty(officePath) && !string.IsNullOrEmpty(officeVersion))
{
MessageBox.Show(string.Format("版本:{0}\r\n安装路径:{1}",officeVersion,officePath));
}
}

//是否安装及版本
private void btnIsInstall_Click(object sender, EventArgs e)
{
try
{
string version = "";
if (OfficeOperator.IsInstall(out version))
{
MessageBox.Show(string.Format("当前安装了{0}", version));
}
else
{
MessageBox.Show("您当前还没有安装微软Office系列软件");
}
}
catch(Exception ex)
{
MessageBox.Show("无法获取系统Office信息");
}
}

N久么发过贴,冒个泡,发个代码,不妥之处请指正!
...全文
851 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
TGB1989 2011-08-10
  • 打赏
  • 举报
回复
抛出异常:没有该注册表项,那对于没有安装office的机器,我该怎么检测呢?
zwamm 2010-09-15
  • 打赏
  • 举报
回复
呵呵,如果没有安装office就得报异常了……
王子样 2009-12-28
  • 打赏
  • 举报
回复
果然高手啊。
ccaozhiping 2009-04-21
  • 打赏
  • 举报
回复
非常感谢
peterb 2009-04-14
  • 打赏
  • 举报
回复
不错 查注册表应该就获取这些内容
冷月孤峰 2009-04-14
  • 打赏
  • 举报
回复
不错,收藏,备用
outou 2009-04-14
  • 打赏
  • 举报
回复
不错呀。
龙宜坡 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 oyljerry 的回复:]
查看各个版本注册表
是不是应该先查高版本,防止低版本升级到高版本没有删除干净注册表...
[/Quote]

接受建议,谢谢!
oyljerry 2009-04-13
  • 打赏
  • 举报
回复
查看各个版本注册表
是不是应该先查高版本,防止低版本升级到高版本没有删除干净注册表...
辰爸 2009-04-13
  • 打赏
  • 举报
回复
学习,有收获,谢谢发帖!
陌上花花 2009-04-13
  • 打赏
  • 举报
回复
学习过。。谢谢
kkun_3yue3 2009-04-13
  • 打赏
  • 举报
回复
收藏
wuyq11 2009-04-13
  • 打赏
  • 举报
回复
不错,应该用注册表
PandaIT 2009-04-13
  • 打赏
  • 举报
回复
up

再看
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)【采用BPSK或GMSK的Turbo码】MSK、GMS内容概要:本文主要介绍了采用BPSK或GMSK调制方式的Turbo码相关技术研究,重点涵盖GMSK调制下的二比特差分解调方法、Turbo码与BPSK/GMSK调制相结合的系统性能分析,并提供了完整的Matlab代码实现方案。研究内容包括调制解调原理、编码结构设计、误码率仿真及系统优化等关键环节,旨在通过仿真手段验证所提出方案的有效性和可靠性,帮助研究人员深入理解现代数字通信系统中的关键技术和其实现方法。; 适合人群:具备一定通信原理和Matlab编程基础,从事无线通信、信号处理、编码理论等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握GMSK调制与Turbo码结合的系统设计与仿真方法;②学习二比特差分解调算法在实际通信系统中的应用;③通过Matlab代码实现提升对数字调制解调和信道编码技术的理解与实践能力;④为相关课题研究、毕业设计或工程项目提供参考和技术支持。; 阅读建议:建议读者结合文中提供的Matlab代码逐模块运行与调试,对照通信系统基本原理深入理解各环节功能,重点关注调制解调过程与Turbo译码的协同工作机制,并尝试修改参数以观察系统性能变化,从而达到理论与实践相结合的学习效果。
代码转载自:https://pan.quark.cn/s/a4b39357ea24 LA 1010 逻辑分析仪被视作一种效能卓越的数字信号分析设备,其核心功能在于对数字通信协议,例如I²C,进行检测与解构。本资源将集中阐述LA 1010的操作流程以及如何借助该设备对I²C协议的波形展开分析。 确保逻辑分析仪被正确地连接至目标系统是极为关键的环节。在运用LA 1010的过程中,必须将分析仪的通道0与通道1分别对应连接至目标装置的SCL(时钟)与SDA(数据)线路。务必保证连接的稳固性且无任何干扰因素,以此确保数据采集的精确度。 随后,需要设定采样参数。采样频率对于能否成功捕捉到信号具有决定性的作用。针对I²C协议,通常选用的采样频率范围介于100kHz到400kHz之间,这一范围的选择取决于实际应用场景中I²C总线的运行速度。然而,LA 1010所能达到的最高采样速率可能高达500MHz,因此需要根据具体需求进行相应的调整。此外,还必须精心挑选适配目标设备工作电压的电压等级,例如3.3V、5V或1.8V。 在软件操作层面,需要选取恰当的通道与协议种类,即I²C。一旦启动采样,逻辑分析仪便开始记录相关数据。软件界面通常会实时展示波形图,为观察与分析提供便利。 关于I²C协议波形的解读,我们可以遵循以下步骤: 1. 总线处于空闲状态时:SCL与SDA均维持在高电平位置,这表明总线当前未进行数据传输。 2. 传输起始信号:当SCL处于高电平期间,SDA线从高电平转换至低电平,此动作标志着数据传输的开始。 3. 地址、数据及应答的识别:在每一个SCL高电平脉冲的持续时间内,SDA线上的电平状态代表了数据位。地址与数据的传输均为双向过程,而读写标识则由SDA线上的电平来...
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 在当前文档中,我们将详细研究在C#开发平台中借助BouncyCastle.Crypto库1.8.10版本达成中国的国家标准密码学方案,涵盖SM2、SM3以及SM4这几项技术。这些密码学方案在中国网络安全保障与数据维护领域具有核心地位,为本地化安全解决方案提供了坚实的技术支撑。 让我们首先掌握这三个国家密码算法的基本原理: 1. **SM2算法**:SM2是一种基于椭圆曲线密码体系(ECC)的公钥加密方案,主要用于数字签名和加密操作。它提供了一种高效且安全的身份确认和数据防护机制。 2. **SM3算法**:SM3是一种密码学哈希函数,与SHA-256类似,能够将任意长度的输入信息压缩为固定长度的摘要,常用于数据完整性的检验和确认。 3. **SM4算法**:SM4是一种分组密码方案,采用128位的分组大小和128位的密钥,适用于对称加密,广泛用于无线网络传输和存储数据的加密处理。 接下来,我们将逐步解析如何运用BouncyCastle.Crypto库在C#环境下实现这些密码学方案: **1. 引入库与配置开发环境** 在C#应用程序中,需要通过NuGet包管理工具或手动方式添加BouncyCastle库的引用。务必确保安装的是1.8.10版本。 ```csharp using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; ``` **2. 实施SM2的加签与解签** SM2的签名过程和验证操作涉及椭圆曲线运算。必须创建一个私...
源码下载地址: https://pan.quark.cn/s/28d95df2f2ec 在数字化时代的进程中,微信小程序凭借其便捷性、无需下载安装的优势,成为了移动互联网应用的热门选择。本篇将详细剖析“猫眼微信小程序源码”,展示其内部开发技术和设计思想,为计划从事微信小程序开发的人员提供重要的学习素材。猫眼微信小程序是一款融合了电影票务购买、影片资讯检索、影评交流等功能的娱乐软件,其源代码具有显著的学习意义。我们必须掌握微信小程序的基本构成。微信小程序由JSON配置文档、WXML结构文档、WXSS样式文档和JavaScript逻辑文档四个部分构成,这些部分共同创建了小程序的运行条件。 1. JSON配置文档:这是小程序的整体设置,包括小程序的基本要素,例如AppID、页面路由、网络请求地址等。猫眼小程序的JSON配置文档或许包含了特定的功能配置,例如个性化主题色调、导航栏设计等,以达成其独特的视觉呈现。 2. WXML(WeiXin Markup Language):这是微信小程序的结构性语言,类似于HTML,用于构建页面的结构和布局。猫眼小程序的WXML文档中,可能包含了丰富的组件,如button(按钮)、view(视图容器)、image(图片)等,通过这些组件来设计出用户交互界面。 3. WXSS(WeiXin Style Sheet):这是微信小程序的样式定义语言,基于CSS,但包含一些扩展功能。猫眼小程序的WXSS文档中,可能会采用多种布局技术(如Flex布局)以及样式动画,以完成精细的UI设计和平滑的用户体验。 4. JavaScript逻辑文档:这是小程序的关键部分,负责处理业务流程和数据管理。猫眼小程序的JavaScript文档中,可能包含了接口调...

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧