`
peizhiinfo
  • 浏览: 1422365 次
文章分类
社区版块
存档分类
最新评论

Silverlight操作客户端注册表(优化)

 
阅读更多

前面贴出了Silverlight在OOB模式下操作客户端的注册表,后来自己又对代码进行了优化,将其封装成了一个操作类。

1.新建一个Silverlight类库,命名为ZKR.Silverlight.Core;

2.在类库下新建类,命名为LocalRegistryModel.cs;

3.实现代码:

  1. usingSystem;
  2. usingSystem.Net;
  3. usingSystem.Windows;
  4. usingSystem.Windows.Controls;
  5. usingSystem.Windows.Documents;
  6. usingSystem.Windows.Ink;
  7. usingSystem.Windows.Input;
  8. usingSystem.Windows.Media;
  9. usingSystem.Windows.Media.Animation;
  10. usingSystem.Windows.Shapes;
  11. namespaceZKR.Silverlight.Core
  12. {
  13. ///<summary>
  14. ///本地已安装软件的注册表对象(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall)
  15. ///</summary>
  16. publicclassLocalRegistryModel
  17. {
  18. ///<summary>
  19. ///注册表名称
  20. ///</summary>
  21. publicstringRegName{get;set;}
  22. ///<summary>
  23. ///软件名称
  24. ///</summary>
  25. publicstringDisplayName{get;set;}
  26. ///<summary>
  27. ///软件版本
  28. ///</summary>
  29. publicstringDisplayVersion{get;set;}
  30. ///<summary>
  31. ///发布者
  32. ///</summary>
  33. publicstringPublisher{get;set;}
  34. ///<summary>
  35. ///安装目录
  36. ///</summary>
  37. publicstringInstallLocation{get;set;}
  38. ///<summary>
  39. ///安装日期
  40. ///</summary>
  41. publicstringInstallDate{get;set;}
  42. ///<summary>
  43. ///运行路径(可能是图标路径)
  44. ///</summary>
  45. publicstringDisplayIcon{get;set;}
  46. ///<summary>
  47. ///卸载路径
  48. ///</summary>
  49. publicstringUninstallString{get;set;}
  50. publicLocalRegistryModel()
  51. {}
  52. }
  53. }


4.在类库下新建类,命名为LocalMachine.cs;

5.实现代码:

  1. usingSystem;
  2. usingSystem.Net;
  3. usingSystem.Windows;
  4. usingSystem.Windows.Controls;
  5. usingSystem.Windows.Documents;
  6. usingSystem.Windows.Ink;
  7. usingSystem.Windows.Input;
  8. usingSystem.Windows.Media;
  9. usingSystem.Windows.Media.Animation;
  10. usingSystem.Windows.Shapes;
  11. usingSystem.Runtime.InteropServices.Automation;
  12. usingSystem.Collections.ObjectModel;
  13. namespaceZKR.Silverlight.Core
  14. {
  15. ///<summary>
  16. ///本地计算机对象(引用Microsoft.CSharp.dll)
  17. ///</summary>
  18. publicclassLocalMachine
  19. {
  20. #region私有变量
  21. ///<summary>
  22. ///注册表操作对象
  23. ///</summary>
  24. privatestaticdynamicObjReg=null;
  25. ///<summary>
  26. ///已安装软件在注册表的路径
  27. ///</summary>
  28. privatestaticstringHKey=@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
  29. #endregion
  30. ///<summary>
  31. ///构造函数
  32. ///</summary>
  33. publicLocalMachine()
  34. {}
  35. #region公共方法
  36. ///<summary>
  37. ///将该Silverlight应用程序加入开机自动启动列表
  38. ///</summary>
  39. ///<returns>程序执行过程中的提示信息</returns>
  40. publicstaticstringAddStartMenu()
  41. {
  42. stringresult="";
  43. using(dynamicShellApplication=AutomationFactory.CreateObject("Shell.Application"))//创建Shell对象
  44. {
  45. #region获取程序菜单中的该Silverlight应用程序的快捷方式
  46. dynamiccommonPrograms=ShellApplication.NameSpace(2);//获取本地开始菜单==》程序菜单
  47. stringallUsersPath=commonPrograms.Self.Path;
  48. dynamiclink=commonPrograms.ParseName(Deployment.Current.OutOfBrowserSettings.ShortName+".lnk");//获取当前Silverlight程序的快捷方式
  49. #endregion
  50. #region获取桌面上的该Silverlight应用程序的快捷方式
  51. if(link==null)
  52. {
  53. commonPrograms=ShellApplication.NameSpace(0);//获取本地桌面菜单
  54. allUsersPath=commonPrograms.Self.Path;
  55. link=commonPrograms.ParseName(Deployment.Current.OutOfBrowserSettings.ShortName+".lnk");//获取当前Silverlight程序的快捷方式
  56. if(link==null)
  57. {
  58. result="在程序菜单和桌面上未找到该程序的快捷方式,不能加载到启动项中.";
  59. }
  60. }
  61. #endregion
  62. #region将快捷方式写入开机自动启动列表
  63. if(string.IsNullOrEmpty(result))
  64. {
  65. using(dynamicWShell=AutomationFactory.CreateObject("WScript.Shell"))
  66. {
  67. WShell.RegWrite(@"HKLM\Software\Microsoft\Windows\CurrentVersion\Run\"+Deployment.Current.OutOfBrowserSettings.ShortName,link.Path);
  68. result="请重启你的机器,你的应用将被自动载入启动列表.";
  69. }
  70. }
  71. #endregion
  72. }
  73. returnresult;
  74. }
  75. ///<summary>
  76. ///将该Silverlight应用程序从开机自动启动列表中移除
  77. ///</summary>
  78. ///<returns></returns>
  79. publicstaticstringRemoveStartMenu()
  80. {
  81. stringresult="";
  82. using(dynamicWShell=AutomationFactory.CreateObject("WScript.Shell"))
  83. {
  84. try
  85. {
  86. WShell.RegDelete(@"HKLM\Software\Microsoft\Windows\CurrentVersion\Run\"+Deployment.Current.OutOfBrowserSettings.ShortName);
  87. result="移除成功.";
  88. }
  89. catch
  90. {
  91. result="没有找到该启动项.";
  92. }
  93. }
  94. returnresult;
  95. }
  96. ///<summary>
  97. ///运行本地应用程序
  98. ///</summary>
  99. ///<paramname="ApplicationPath">要运行的应用程序的路径</param>
  100. publicstaticvoidRunApplication(stringApplicationPath)
  101. {
  102. if(!string.IsNullOrEmpty(ApplicationPath))
  103. {
  104. using(dynamiccmd=AutomationFactory.CreateObject("WScript.Shell"))
  105. {
  106. try{cmd.Exec(@ApplicationPath);}
  107. catch{}
  108. }
  109. }
  110. }
  111. ///<summary>
  112. ///卸载本地应用程序
  113. ///</summary>
  114. ///<paramname="ApplicationPath">要卸载的应用程序的路径</param>
  115. publicstaticvoidUninstallApplication(stringApplicationPath)
  116. {
  117. if(!string.IsNullOrEmpty(ApplicationPath))
  118. {
  119. using(dynamiccmd=AutomationFactory.CreateObject("WScript.Shell"))
  120. {
  121. try{cmd.Exec(ApplicationPath);}
  122. catch{}
  123. }
  124. }
  125. }
  126. ///<summary>
  127. ///获取本地已安装软件列表(忽略名称为空的软件信息)
  128. ///</summary>
  129. ///<returns>已安装软件列表</returns>
  130. publicstaticObservableCollection<LocalRegistryModel>GetInstallSoftware()
  131. {
  132. ObservableCollection<LocalRegistryModel>ListReg=newObservableCollection<LocalRegistryModel>();
  133. dynamicShellApplication=null;
  134. try
  135. {
  136. ShellApplication=AutomationFactory.CreateObject("WbemScripting.SWbemLocator");//创建Shell对象
  137. }
  138. catch{returnListReg;}
  139. ObjReg=ShellApplication.ConnectServer(".",@"/root/default");//连接到主机
  140. ObjRegObjReg=ObjReg.get("StdRegProv");//创建注册表访问对象
  141. object[]InstalledSoft=GetSubKeys();
  142. if(InstalledSoft!=null)
  143. {
  144. foreach(objectSoftIteminInstalledSoft)
  145. {
  146. LocalRegistryModelreg=DisposeSubKey(SoftItem.ToString());
  147. if(reg!=null&&!string.IsNullOrEmpty(reg.DisplayName))
  148. {
  149. ListReg.Add(reg);
  150. }
  151. }
  152. }
  153. returnListReg;
  154. }
  155. #endregion
  156. #region私有方法
  157. ///<summary>
  158. ///获取注册表下的某一项的子项
  159. ///</summary>
  160. ///<returns>子项集合</returns>
  161. privatestaticobject[]GetSubKeys()
  162. {
  163. object[]result=null;
  164. dynamicRegMethod=ObjReg.Methods_("EnumKey");//为Shell对象添加方法名称
  165. dynamicRegParam=RegMethod.InParameters.SpawnInstance_();//为Shell对象添加参数
  166. RegParam.hDefKey=0x80000002;//设置参数的主目录(HKLM)
  167. RegParam.sSubKeyName=HKey;//设置参数的子目录
  168. dynamicReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);//执行方法且获取返回值
  169. if(ReturnParam.ReturnValue==0)//操作正常
  170. {
  171. try
  172. {
  173. result=(object[])ReturnParam.sNames;//获取子项集合
  174. }
  175. catch{}
  176. }
  177. returnresult;
  178. }
  179. ///<summary>
  180. ///获取注册表对象
  181. ///</summary>
  182. ///<paramname="SubKey">子项名称</param>
  183. ///<returns>注册表对象</returns>
  184. privatestaticLocalRegistryModelDisposeSubKey(stringSubKey)
  185. {
  186. LocalRegistryModelreg=newLocalRegistryModel();//创建注册表对象
  187. dynamicRegMethod=ObjReg.Methods_("GetStringValue");//为Shell对象添加方法名称
  188. dynamicRegParam=RegMethod.InParameters.SpawnInstance_();//创建Shell对象的参数
  189. RegParam.hDefKey=0x80000002;//设置参数的主目录(HKLM)
  190. RegParam.sSubKeyName=HKey+@"\"+SubKey;//设置参数的子目录
  191. reg.RegName=SubKey;
  192. RegParam.sValueName="DisplayName";//设置参数的子键名称
  193. dynamicReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);//执行方法且获取返回值
  194. reg.DisplayName=Convert.ToString(ReturnParam.sValue);
  195. if(string.IsNullOrEmpty(reg.DisplayName))
  196. {
  197. returnreg;
  198. }
  199. RegParam.sValueName="DisplayVersion";
  200. ReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);
  201. reg.DisplayVersion=Convert.ToString(ReturnParam.sValue);
  202. RegParam.sValueName="Publisher";
  203. ReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);
  204. reg.Publisher=Convert.ToString(ReturnParam.sValue);
  205. RegParam.sValueName="InstallLocation";
  206. ReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);
  207. reg.InstallLocation=Convert.ToString(ReturnParam.sValue);
  208. RegParam.sValueName="InstallDate";
  209. ReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);
  210. reg.InstallDate=Convert.ToString(ReturnParam.sValue);
  211. RegParam.sValueName="DisplayIcon";
  212. ReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);
  213. reg.DisplayIcon=Convert.ToString(ReturnParam.sValue);
  214. RegParam.sValueName="UninstallString";
  215. ReturnParam=ObjReg.ExecMethod_(RegMethod.Name,RegParam);
  216. reg.UninstallString=Convert.ToString(ReturnParam.sValue);
  217. returnreg;
  218. }
  219. #endregion
  220. }
  221. }

6.新建Silverlight项目,添加ZKR.Silverlight.Core的引用;

7.xaml代码如下:

  1. <navigation:Pagex:Class="LogInfoTest.Software"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. mc:Ignorable="d"
  7. xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
  8. d:DesignWidth="640"d:DesignHeight="480"
  9. xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
  10. Title="SoftwarePage">
  11. <Gridx:Name="LayoutRoot"Background="White">
  12. <TextBlockText="获取本机已安装软件的列表"FontSize="12"VerticalAlignment="Top"Margin="0,5,0,0"HorizontalAlignment="Left"Width="150"Height="20"></TextBlock>
  13. <Buttonx:Name="btnLoad"Content="读取"Click="btnLoad_Click"Width="50"Height="25"VerticalAlignment="Top"HorizontalAlignment="Left"Margin="160,3,0,0"></Button>
  14. <sdk:DataGridMargin="0,34,0,0"x:Name="DataGrid1"AutoGenerateColumns="False">
  15. <sdk:DataGrid.Columns>
  16. <sdk:DataGridTextColumnBinding="{BindingRegName,Mode=TwoWay}"CanUserReorder="False"Header="注册表名称"IsReadOnly="True"/>
  17. <sdk:DataGridTextColumnBinding="{BindingDisplayName,Mode=TwoWay}"CanUserReorder="False"Header="软件名称"IsReadOnly="True"/>
  18. <sdk:DataGridTextColumnBinding="{BindingDisplayVersion,Mode=TwoWay}"CanUserReorder="False"Header="软件版本"IsReadOnly="True"/>
  19. <sdk:DataGridTextColumnBinding="{BindingPublisher,Mode=TwoWay}"CanUserReorder="False"Header="发布者"IsReadOnly="True"/>
  20. <sdk:DataGridTextColumnBinding="{BindingInstallLocation,Mode=TwoWay}"CanUserReorder="False"Header="安装目录"IsReadOnly="True"/>
  21. <sdk:DataGridTextColumnBinding="{BindingInstallDate,Mode=TwoWay}"CanUserReorder="False"Header="安装时间"IsReadOnly="True"/>
  22. <sdk:DataGridTextColumnBinding="{BindingDisplayIcon,Mode=TwoWay}"CanUserReorder="False"Header="运行路径"IsReadOnly="True"/>
  23. <sdk:DataGridTextColumnBinding="{BindingUninstallString,Mode=TwoWay}"CanUserReorder="False"Header="卸载路径"IsReadOnly="True"/>
  24. <sdk:DataGridTemplateColumnHeader="操作">
  25. <sdk:DataGridTemplateColumn.CellTemplate>
  26. <DataTemplate>
  27. <StackPanelOrientation="Horizontal">
  28. <Buttonx:Name="btnRun"Content="运行"DataContext="{BindingDisplayIcon}"Click="btnRun_Click"/>
  29. <Buttonx:Uid="btnUninstall"Content="卸载"DataContext="{BindingUninstallString}"Click="btnUninstall_Click"Margin="5,0,0,0"/>
  30. </StackPanel>
  31. </DataTemplate>
  32. </sdk:DataGridTemplateColumn.CellTemplate>
  33. </sdk:DataGridTemplateColumn>
  34. </sdk:DataGrid.Columns>
  35. </sdk:DataGrid>
  36. </Grid>
  37. </navigation:Page>
  1. usingSystem;
  2. usingSystem.Collections.Generic;
  3. usingSystem.Linq;
  4. usingSystem.Net;
  5. usingSystem.Windows;
  6. usingSystem.Windows.Controls;
  7. usingSystem.Windows.Documents;
  8. usingSystem.Windows.Input;
  9. usingSystem.Windows.Media;
  10. usingSystem.Windows.Media.Animation;
  11. usingSystem.Windows.Shapes;
  12. usingSystem.Windows.Navigation;
  13. usingSystem.Runtime.InteropServices.Automation;
  14. usingZKR.Silverlight.Core;
  15. usingSystem.Collections.ObjectModel;
  16. namespaceLogInfoTest
  17. {
  18. publicpartialclassSoftware:Page
  19. {
  20. publicSoftware()
  21. {
  22. InitializeComponent();
  23. }
  24. //当用户导航到此页面时执行。
  25. protectedoverridevoidOnNavigatedTo(NavigationEventArgse)
  26. {
  27. }
  28. privatevoidbtnLoad_Click(objectsender,RoutedEventArgse)
  29. {
  30. this.DataGrid1.ItemsSource=LocalMachine.GetInstallSoftware();
  31. }
  32. privatevoidbtnRun_Click(objectsender,RoutedEventArgse)
  33. {
  34. LocalMachine.RunApplication(((Button)sender).DataContext.ToString());
  35. }
  36. privatevoidbtnUninstall_Click(objectsender,RoutedEventArgse)
  37. {
  38. LocalMachine.UninstallApplication(((Button)sender).DataContext.ToString());
  39. }
  40. }
  41. }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics