【1】Windows自动更新API

前几天写过关于Vista下防火墙的设置,今天觉得防火墙都有对应的API,那自动更新是否有相应的API呢?Vista下的与Xp下的有多少不同呢?带着这个疑问开始一天的调查。
  
  查了很多资料找到要操作Windows Update必须经由Windows Update Agent(WUA)。
  在Vista和Xp下,该wuapi.dll都能找到(Windows/System32下),奇怪的是,Vista下该dll的版本是6.0,而Xp下是5.8,不知道改动点在哪里,粗略查看了里面的主要的类,发现并没改动什么,难道只是内部函数的调整?
  
  要操作Windows Update相应类,必须了解他们之间的关系,如图所示:
  
  从上图不难发现,AutomaticUpdatesClass只是自动更新的设置类,关于所有自动更新的类都通过UpdateSessionClass。
  
  取得自动更新的所有设置,以及如何改变设置:
  通过实例化一个AutomaticUpdatesClass类,然后访问它的Settings属性,该属性中:
  NotificationLevel:自动更新的动作(自动/无效/通知后下载/下载后通知),枚举类型
  ScheduledInstallationDay:自动下载是每星期几(从星期一到星期天),枚举类型
  ScheduledInstallationTime:自动下载的时间(从0点到23点)
  
  可以直接修改
  AutomaticUpdatesNotificationLevel属性以及ScheduledInstallationDay和ScheduledInstallationTime
  设置完后调用IAutomaticUpdatesSettings的Save方法。
  IAutomaticUpdatesSettings实例通过AutomaticUpdatesClass对象的Settings属性获得。
  
  在该AutomaticUpdatesClass类中,可以调用EnableService方法启动自动更新服务,只有当自动更新服务启动后,通过读取自动更新设置,来从MS网站获取更新内容。通常情况下,自动更新服务都是设置为自动启动。
  
  当然你也可以通过程序启动,该服务启动后,自动设为自动启动(无论你原先是手动还是无效),MS没有提供方法将该服务停止关闭。
  
  当服务启动后,可以使用下面3个方法:
  DetectNow:开始更新
  Pause:暂停更新
  Resume:恢复更新
  
  参考代码:
  
   1 public static void AutoUpdateSetting()
   2 {
   3 System.Console.WriteLine("AutoUpdate Imformation:");
   4
   5 WUApiLib.AutomaticUpdatesClass updateCls = new WUApiLib.AutomaticUpdatesClass();
   6
   7 //Show Update Dialog:
   8 updateCls.ShowSettingsDialog();
   9
  10 WUApiLib.IAutomaticUpdatesSettings upSettings = updateCls.Settings;
  11
  12 //Show Update Setting -- Notification Level
  13 // aunlNotConfigured = 0
  14 // aunlDisabled = 1
  15 // aunlNotifyBeforeDownload = 2
  16 // aunlNotifyBeforeInstallation = 3
  17 // aunlScheduledInstallation = 4
  18 System.Console.WriteLine("Notification Level : {0}", upSettings.NotificationLevel.ToString());
  19
  20 if( upSettings.NotificationLevel == WUApiLib.AutomaticUpdatesNotificationLevel.aunlScheduledInstallation )
  21 {
  22 // ScheduledInstallationDay:
  23 // ausidEveryDay = 0,
  24 // ausidEverySunday = 1,
  25 // ausidEveryMonday = 2,
  26 // ausidEveryTuesday = 3,
  27 // ausidEveryWednesday = 4,
  28 // ausidEveryThursday = 5,
  29 // ausidEveryFriday = 6,
  30 // ausidEverySaturday = 7,
  31
  32 // ScheduledInstallationTime: 0 - 23
  33 System.Console.WriteLine("Update Schedule Time : {0} , {1}",
  34 upSettings.ScheduledInstallationDay.ToString(),
  35 upSettings.ScheduledInstallationTime.ToString());
  36 }
  37
  38 upSettings.NotificationLevel = WUApiLib.AutomaticUpdatesNotificationLevel.aunlNotifyBeforeDownload;
  39 upSettings.Save();
  40
  41 if( updateCls.ServiceEnabled )
  42 {
  43 System.Console.WriteLine("Update Service state : {0}", updateCls.ServiceEnabled.ToString());
  44 //updateCls.EnableService();
  45 System.Console.WriteLine("DetectNow");
  46 updateCls.DetectNow();
  47
  48 Thread.Sleep(10000);
  49 System.Console.WriteLine("Pause");
  50 updateCls.Pause();
  51
  52 Thread.Sleep(10000);
  53 System.Console.WriteLine("Resume");
  54 updateCls.Resume();
  55 }
  56
  57 System.Console.WriteLine();
  58 }
  大家都知道控制面板中的自动更新的设置是没有代理选项的,那到底自动更新支持代理吗?
  当然支持,自动更新会根据IE浏览器中的代理设置连接,但是当代理服务器需要用户名和密码呢?
  这样只能通过程序来设置了。UpdateSessionClass类就提供该功能。
  
  实例化该类后,通过访问该类的WebProxy属性得到WebProxyClass类的实例。
  可以设置WebProxyClass类的二个属性,并调用一个方法即可。
  Address:代理的地址
  UserName:用户名
  SetPassword(string strPassword):设置密码
  
  参考代码:
   1public static void AutoUpdateSession()
   2{
   3 WUApiLib.UpdateSessionClass upSessCls = new WUApiLib.UpdateSessionClass();
   4
   5 System.Console.WriteLine("Update Session : {0}", upSessCls.ClientApplicationID);
   6
   7 WUApiLib.WebProxyClass webProxy = (WUApiLib.WebProxyClass)upSessCls.WebProxy;
   8
   9 webProxy.Address = @"*********";
  10 webProxy.UserName = "*******";
  11 webProxy.SetPassword("******");
  12
  13 System.Console.WriteLine("WebProxy Address : {0}", webProxy.Address);
  14 System.Console.WriteLine("WebProxy AutoDetect : {0}", webProxy.AutoDetect);
  15 System.Console.WriteLine("WebProxy UserName : {0}", webProxy.UserName);
  16}
  当我调查到这里的时候,想做一个软件,可以自己来实现更多的操作,对自动更新来说。
  大家有什么好的想法,可以告诉我,谢谢~~~。
  
  文中有错误的地方,希望指正。
  
  国内没有好的这方面的资料,可以参考MS的MSDN。
  参考:
  Interfaces (Windows)
  Using the Windows Update Agent API (Windows)
  Windows Update Agent Object Model (Windows)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值