はじめに
Windowsでは更新プログラムでインストールされている情報を参照することができますが、より詳しい情報はWUAPIを利用して取得することができます。ここでは、WUAPIを利用して更新プログラムの詳細情報を取得したいと思います。
WUApiLibをを利用する
Windows Update Agent APIを利用するためには、まずWUApiLibというライブラリを読み込みます。
読み込むと、WUAPIのクラスを利用することができるようになります。
using WUApiLib;
namespace WUSample
{
class Program
{
static void Main(string[] args)
{
try
{
UpdateSession us = new UpdateSession();
IUpdateSercher searcher = us.CreateUpdateSearcher();
int installed = 1;
string[] items = new string[] {"Title","KBArticleIDs"}
ISearchResult isr = searcher.Search($"IsInstalled={installed} and Type='Software'");
if(isr != null && isr.ResultCode == OperationResultCode.orcSucceeded)
{
foreach (IUpdate updateInfo in isr.Updates)
{
foreach(string item in items)
{
object value = GetPropertyValue(updateInfo, item);
string valueS;
if(value != null)
{
// 今回はサンプルとしてタイプを指定していますが
// 用途に応じてタイプを追加してください。
if(value.GetType() == typeof(string[]))
{
StringBuilder sb = new StringBuilder();
string[] vals = (string[])value;
foreach(string val in vals)
{
sb.AppendFormat($"{sb.Length}{val}");
}
valueS = sb.ToString();
}
else
{
valueS = value.ToString();
}
}
else
{
valueS = null;
}
Console.WriteLine($"[INFO][{item}] {valueS}");
}
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
private static string GetPropertyValue(IUpdate updateInfo, string propertyName)
{
// 以下URLを参照
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa386907%28v=vs.85%29.aspx
switch(propertyName)
{
case "Title" :
return updateInfo.Title;
case "KBArticleIDs" :
return GetString(updateInfo.KBArticleIDs);
default :
return "";
}
}
private static string GetString(StringCollection stringCollection)
{
StringBuilder sb = new StringBuilder("[");
foreach(string s in stringCollection)
{
if (sb.Length > 1)
{
sb.Append(",");
}
sb.Append(s);
}
sb.Append("]");
return sb.ToString();
}
}
}
出力結果は下記のようになります。
[INFO][Title] Windows Defender Antivirus のセキュリティ インテリジェンス更新プログラム - KBXXXXX ・・・
[INFO][KBArticleIDs] [2267602]
・・・
今回は「Title」と「KBArticleIDs」のみ出力対象としましたが、MSサイトを参考に他にも様々な情報を
出力できますので、参考にしてみてください。