前面贴出了Silverlight在OOB模式下操作客户端的注册表,后来自己又对代码进行了优化,将其封装成了一个操作类。
1.新建一个Silverlight类库,命名为ZKR.Silverlight.Core;
2.在类库下新建类,命名为LocalRegistryModel.cs;
3.实现代码:
- usingSystem;
- usingSystem.Net;
- usingSystem.Windows;
- usingSystem.Windows.Controls;
- usingSystem.Windows.Documents;
- usingSystem.Windows.Ink;
- usingSystem.Windows.Input;
- usingSystem.Windows.Media;
- usingSystem.Windows.Media.Animation;
- usingSystem.Windows.Shapes;
- namespaceZKR.Silverlight.Core
- {
-
///<summary>
- ///本地已安装软件的注册表对象(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall)
-
///</summary>
- publicclassLocalRegistryModel
- {
-
///<summary>
- ///注册表名称
-
///</summary>
- publicstringRegName{get;set;}
-
///<summary>
- ///软件名称
-
///</summary>
- publicstringDisplayName{get;set;}
-
///<summary>
- ///软件版本
-
///</summary>
- publicstringDisplayVersion{get;set;}
-
///<summary>
- ///发布者
-
///</summary>
- publicstringPublisher{get;set;}
-
///<summary>
- ///安装目录
-
///</summary>
- publicstringInstallLocation{get;set;}
-
///<summary>
- ///安装日期
-
///</summary>
- publicstringInstallDate{get;set;}
-
///<summary>
- ///运行路径(可能是图标路径)
-
///</summary>
- publicstringDisplayIcon{get;set;}
-
///<summary>
- ///卸载路径
-
///</summary>
- publicstringUninstallString{get;set;}
- publicLocalRegistryModel()
- {}
- }
- }
4.在类库下新建类,命名为LocalMachine.cs;
5.实现代码:
- usingSystem;
- usingSystem.Net;
- usingSystem.Windows;
- usingSystem.Windows.Controls;
- usingSystem.Windows.Documents;
- usingSystem.Windows.Ink;
- usingSystem.Windows.Input;
- usingSystem.Windows.Media;
- usingSystem.Windows.Media.Animation;
- usingSystem.Windows.Shapes;
- usingSystem.Runtime.InteropServices.Automation;
- usingSystem.Collections.ObjectModel;
- namespaceZKR.Silverlight.Core
- {
-
///<summary>
- ///本地计算机对象(引用Microsoft.CSharp.dll)
-
///</summary>
- publicclassLocalMachine
- {
- #region私有变量
-
///<summary>
- ///注册表操作对象
-
///</summary>
-
privatestaticdynamicObjReg=null;
-
///<summary>
- ///已安装软件在注册表的路径
-
///</summary>
-
privatestaticstringHKey=@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
- #endregion
-
///<summary>
- ///构造函数
-
///</summary>
- publicLocalMachine()
- {}
- #region公共方法
-
///<summary>
- ///将该Silverlight应用程序加入开机自动启动列表
-
///</summary>
-
///<returns>程序执行过程中的提示信息</returns>
- publicstaticstringAddStartMenu()
- {
-
stringresult="";
-
using(dynamicShellApplication=AutomationFactory.CreateObject("Shell.Application"))//创建Shell对象
- {
- #region获取程序菜单中的该Silverlight应用程序的快捷方式
-
dynamiccommonPrograms=ShellApplication.NameSpace(2);//获取本地开始菜单==》程序菜单
-
stringallUsersPath=commonPrograms.Self.Path;
-
dynamiclink=commonPrograms.ParseName(Deployment.Current.OutOfBrowserSettings.ShortName+".lnk");//获取当前Silverlight程序的快捷方式
- #endregion
- #region获取桌面上的该Silverlight应用程序的快捷方式
-
if(link==null)
- {
-
commonPrograms=ShellApplication.NameSpace(0);//获取本地桌面菜单
-
allUsersPath=commonPrograms.Self.Path;
-
link=commonPrograms.ParseName(Deployment.Current.OutOfBrowserSettings.ShortName+".lnk");//获取当前Silverlight程序的快捷方式
-
if(link==null)
- {
-
result="在程序菜单和桌面上未找到该程序的快捷方式,不能加载到启动项中.";
- }
- }
- #endregion
- #region将快捷方式写入开机自动启动列表
- if(string.IsNullOrEmpty(result))
- {
-
using(dynamicWShell=AutomationFactory.CreateObject("WScript.Shell"))
- {
- WShell.RegWrite(@"HKLM\Software\Microsoft\Windows\CurrentVersion\Run\"+Deployment.Current.OutOfBrowserSettings.ShortName,link.Path);
-
result="请重启你的机器,你的应用将被自动载入启动列表.";
- }
- }
- #endregion
- }
- returnresult;
- }
-
///<summary>
- ///将该Silverlight应用程序从开机自动启动列表中移除
-
///</summary>
-
///<returns></returns>
- publicstaticstringRemoveStartMenu()
- {
-
stringresult="";
-
using(dynamicWShell=AutomationFactory.CreateObject("WScript.Shell"))
- {
- try
- {
- WShell.RegDelete(@"HKLM\Software\Microsoft\Windows\CurrentVersion\Run\"+Deployment.Current.OutOfBrowserSettings.ShortName);
-
result="移除成功.";
- }
- catch
- {
-
result="没有找到该启动项.";
- }
- }
- returnresult;
- }
-
///<summary>
- ///运行本地应用程序
-
///</summary>
-
///<paramname="ApplicationPath">要运行的应用程序的路径</param>
- publicstaticvoidRunApplication(stringApplicationPath)
- {
- if(!string.IsNullOrEmpty(ApplicationPath))
- {
-
using(dynamiccmd=AutomationFactory.CreateObject("WScript.Shell"))
- {
- try{cmd.Exec(@ApplicationPath);}
- catch{}
- }
- }
- }
-
///<summary>
- ///卸载本地应用程序
-
///</summary>
-
///<paramname="ApplicationPath">要卸载的应用程序的路径</param>
- publicstaticvoidUninstallApplication(stringApplicationPath)
- {
- if(!string.IsNullOrEmpty(ApplicationPath))
- {
-
using(dynamiccmd=AutomationFactory.CreateObject("WScript.Shell"))
- {
- try{cmd.Exec(ApplicationPath);}
- catch{}
- }
- }
- }
-
///<summary>
- ///获取本地已安装软件列表(忽略名称为空的软件信息)
-
///</summary>
-
///<returns>已安装软件列表</returns>
-
publicstaticObservableCollection<LocalRegistryModel>GetInstallSoftware()
- {
-
ObservableCollection<LocalRegistryModel>ListReg=newObservableCollection<LocalRegistryModel>();
-
dynamicShellApplication=null;
- try
- {
-
ShellApplication=AutomationFactory.CreateObject("WbemScripting.SWbemLocator");//创建Shell对象
- }
- catch{returnListReg;}
-
ObjReg=ShellApplication.ConnectServer(".",@"/root/default");//连接到主机
-
ObjRegObjReg=ObjReg.get("StdRegProv");//创建注册表访问对象
-
object[]InstalledSoft=GetSubKeys();
- if(InstalledSoft!=null)
- {
- foreach(objectSoftIteminInstalledSoft)
- {
-
LocalRegistryModelreg=DisposeSubKey(SoftItem.ToString());
- if(reg!=null&&!string.IsNullOrEmpty(reg.DisplayName))
- {
- ListReg.Add(reg);
- }
- }
- }
- returnListReg;
- }
- #endregion
- #region私有方法
-
///<summary>
- ///获取注册表下的某一项的子项
-
///</summary>
-
///<returns>子项集合</returns>
- privatestaticobject[]GetSubKeys()
- {
-
object[]result=null;
-
dynamicRegMethod=ObjReg.Methods_("EnumKey");//为Shell对象添加方法名称
-
dynamicRegParam=RegMethod.InParameters.SpawnInstance_();//为Shell对象添加参数
-
RegParam.hDefKey=0x80000002;//设置参数的主目录(HKLM)
-
RegParam.sSubKeyName=HKey;//设置参数的子目录
-
dynamicReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);//执行方法且获取返回值
-
if(ReturnParam.ReturnValue==0)//操作正常
- {
- try
- {
-
result=(object[])ReturnParam.sNames;//获取子项集合
- }
- catch{}
- }
- returnresult;
- }
-
///<summary>
- ///获取注册表对象
-
///</summary>
-
///<paramname="SubKey">子项名称</param>
-
///<returns>注册表对象</returns>
- privatestaticLocalRegistryModelDisposeSubKey(stringSubKey)
- {
-
LocalRegistryModelreg=newLocalRegistryModel();//创建注册表对象
-
dynamicRegMethod=ObjReg.Methods_("GetStringValue");//为Shell对象添加方法名称
-
dynamicRegParam=RegMethod.InParameters.SpawnInstance_();//创建Shell对象的参数
-
RegParam.hDefKey=0x80000002;//设置参数的主目录(HKLM)
-
RegParam.sSubKeyName=HKey+@"\"+SubKey;//设置参数的子目录
-
reg.RegName=SubKey;
-
RegParam.sValueName="DisplayName";//设置参数的子键名称
-
dynamicReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);//执行方法且获取返回值
-
reg.DisplayName=Convert.ToString(ReturnParam.sValue);
- if(string.IsNullOrEmpty(reg.DisplayName))
- {
- returnreg;
- }
-
RegParam.sValueName="DisplayVersion";
-
ReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);
-
reg.DisplayVersion=Convert.ToString(ReturnParam.sValue);
-
RegParam.sValueName="Publisher";
-
ReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);
-
reg.Publisher=Convert.ToString(ReturnParam.sValue);
-
RegParam.sValueName="InstallLocation";
-
ReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);
-
reg.InstallLocation=Convert.ToString(ReturnParam.sValue);
-
RegParam.sValueName="InstallDate";
-
ReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);
-
reg.InstallDate=Convert.ToString(ReturnParam.sValue);
-
RegParam.sValueName="DisplayIcon";
-
ReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);
-
reg.DisplayIcon=Convert.ToString(ReturnParam.sValue);
-
RegParam.sValueName="UninstallString";
-
ReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);
-
reg.UninstallString=Convert.ToString(ReturnParam.sValue);
- returnreg;
- }
- #endregion
- }
- }
6.新建Silverlight项目,添加ZKR.Silverlight.Core的引用;
7.xaml代码如下:
- <navigation:Pagex:Class="LogInfoTest.Software"
-
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-
mc:Ignorable="d"
-
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
-
d:DesignWidth="640"d:DesignHeight="480"
-
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
-
Title="SoftwarePage">
-
<Gridx:Name="LayoutRoot"Background="White">
-
<TextBlockText="获取本机已安装软件的列表"FontSize="12"VerticalAlignment="Top"Margin="0,5,0,0"HorizontalAlignment="Left"Width="150"Height="20"></TextBlock>
-
<Buttonx:Name="btnLoad"Content="读取"Click="btnLoad_Click"Width="50"Height="25"VerticalAlignment="Top"HorizontalAlignment="Left"Margin="160,3,0,0"></Button>
-
<sdk:DataGridMargin="0,34,0,0"x:Name="DataGrid1"AutoGenerateColumns="False">
-
<sdk:DataGrid.Columns>
-
<sdk:DataGridTextColumnBinding="{BindingRegName,Mode=TwoWay}"CanUserReorder="False"Header="注册表名称"IsReadOnly="True"/>
-
<sdk:DataGridTextColumnBinding="{BindingDisplayName,Mode=TwoWay}"CanUserReorder="False"Header="软件名称"IsReadOnly="True"/>
-
<sdk:DataGridTextColumnBinding="{BindingDisplayVersion,Mode=TwoWay}"CanUserReorder="False"Header="软件版本"IsReadOnly="True"/>
-
<sdk:DataGridTextColumnBinding="{BindingPublisher,Mode=TwoWay}"CanUserReorder="False"Header="发布者"IsReadOnly="True"/>
-
<sdk:DataGridTextColumnBinding="{BindingInstallLocation,Mode=TwoWay}"CanUserReorder="False"Header="安装目录"IsReadOnly="True"/>
-
<sdk:DataGridTextColumnBinding="{BindingInstallDate,Mode=TwoWay}"CanUserReorder="False"Header="安装时间"IsReadOnly="True"/>
-
<sdk:DataGridTextColumnBinding="{BindingDisplayIcon,Mode=TwoWay}"CanUserReorder="False"Header="运行路径"IsReadOnly="True"/>
-
<sdk:DataGridTextColumnBinding="{BindingUninstallString,Mode=TwoWay}"CanUserReorder="False"Header="卸载路径"IsReadOnly="True"/>
-
<sdk:DataGridTemplateColumnHeader="操作">
-
<sdk:DataGridTemplateColumn.CellTemplate>
-
<DataTemplate>
-
<StackPanelOrientation="Horizontal">
-
<Buttonx:Name="btnRun"Content="运行"DataContext="{BindingDisplayIcon}"Click="btnRun_Click"/>
-
<Buttonx:Uid="btnUninstall"Content="卸载"DataContext="{BindingUninstallString}"Click="btnUninstall_Click"Margin="5,0,0,0"/>
-
</StackPanel>
-
</DataTemplate>
-
</sdk:DataGridTemplateColumn.CellTemplate>
-
</sdk:DataGridTemplateColumn>
-
</sdk:DataGrid.Columns>
-
</sdk:DataGrid>
-
</Grid>
-
</navigation:Page>
- usingSystem;
- usingSystem.Collections.Generic;
- usingSystem.Linq;
- usingSystem.Net;
- usingSystem.Windows;
- usingSystem.Windows.Controls;
- usingSystem.Windows.Documents;
- usingSystem.Windows.Input;
- usingSystem.Windows.Media;
- usingSystem.Windows.Media.Animation;
- usingSystem.Windows.Shapes;
- usingSystem.Windows.Navigation;
- usingSystem.Runtime.InteropServices.Automation;
- usingZKR.Silverlight.Core;
- usingSystem.Collections.ObjectModel;
- namespaceLogInfoTest
- {
- publicpartialclassSoftware:Page
- {
- publicSoftware()
- {
- InitializeComponent();
- }
- //当用户导航到此页面时执行。
- protectedoverridevoidOnNavigatedTo(NavigationEventArgse)
- {
- }
- privatevoidbtnLoad_Click(objectsender,RoutedEventArgse)
- {
-
this.DataGrid1.ItemsSource=LocalMachine.GetInstallSoftware();
- }
- privatevoidbtnRun_Click(objectsender,RoutedEventArgse)
- {
- LocalMachine.RunApplication(((Button)sender).DataContext.ToString());
- }
- privatevoidbtnUninstall_Click(objectsender,RoutedEventArgse)
- {
- LocalMachine.UninstallApplication(((Button)sender).DataContext.ToString());
- }
- }
- }
分享到:
相关推荐
包含内容: 1.SilverlightOOB模式下将其加入客户端的开机自动启动项; 2.OOB模式下从开机自动启动项中移除;...4.TXT、XML、数据库等方式记录操作日志; 5.Silverlight通过RIA获取服务器的已安装软件。
Silverlight浏览器客户端运行插件
silverlight 4.0客户端导出execl数据 支持客户端导出。。支持2007 2003
Silverlight客户端获取服务器文件路径或文件流,并通过路径直接显示服务器端图片
你经常会做这样的操作:获取实体(通常是一个Load Operation)在其完成事件中将其添加到一个ObservableCollection中,现在你依然可以这样做。不过在WCF RIA Services的第一个SP中分别对一些之前就存在的集合类型进行...
Silverlight WCF RIA服务(二十二)Silverlight 客户端 3 源代码
WCF RIA 服务 (二十七)-- Silverlight 客户端 8 源代码
实现了网络聊天IM的基本功能,基于.NET 2.0 开发,使用了ESFramework通信框架。支持windows客户端和Silverlight客户端。很强大!
WCF RIA 服务 (二十六)-- Silverlight 客户端 7 源代码
WCF RIA 服务 (二十五)-- Silverlight 客户端 6 源代码
WCF RIA 服务 (二十四)-- Silverlight 客户端 5 源代码
基于silverlight的supermap客户端开发帮助资料。silverlight,webgis,supermap,b/s,gis系统
范例使用SuperMap iClient 6R for Silverlight开发模式,实现获取地图服务中所有的图层以及控制图层显示隐藏功能。
例子中,silverlight是客户端(这是当然的),服务端也是用C#语言 仔细搜索了一下大家写的东西,感觉这个还可以,就拿出来分享给大家,希望对大家有点小用吧 总结Silverlight中应用Socket的几点特殊之处 1.所有的...
员工籍贯分布主要展现客户端动态专题图,将多种属性因素在客户端动态呈现,与用户操作互动。通过聚类功能模块进行客户端专题图的标绘。
基于SuperMap iClient for Silverlight构建的指标对比系统主要采用图表控件Visifire,通过饼状和圈状图清晰形象的展现了不同区域各指标的分布和对比图,使对比结果一目了然。
silverLight 多线程 操作 silverLight Multithread Operation silverLight Multithread Operation silverLight Multithread Operation
从RIA服务中,SL客户端动态获取数据。首先,请安装 AdventureWorks2008R2,该文件下载地址:...
silverlight操作XML,silverlight在操作服务器上的XML文件有点捉襟见肘,下载文件中解释了如何读取和书写XML文件
wic安装文件,silverlight4客户端安装文件 .net framework 4官方下载地址 安装步骤文档内容简介如下 1.注册MIME类型 2.允许ASP.NET 4.0.30319 3.asp.net的版本要选择为4.0.30319 4.访问控制设置