Windows Update API c#代码无法获取更新历史logging

我正在编写一个代码,以自动为Windows操作系统修补公司内部networking中的安全修补程序。 (我正在使用Visual Studio .NET,因此.NET Framework 1.1,并在C#中进行开发。)
作为第一步,我想使用WUApi列出已经应用到系统的修补程序。 我已经添加了对“tlbimped”wuapi.dll的引用,我也注册了与regsvr32的原始DLL,Windows更新服务似乎已经启动并在服务pipe理器中运行,但代码拒绝工作:它返回零作为应用修补程序的数量,甚至在应用修补程序之后,它在到达“QueryHistory”函数时抛出COMException。
代码如下:

using System; using System.ComponentModel; using System.Windows.Forms; using System.Security; using System.Security.Permissions; using WUApiInterop; namespace Hotfix_Scanner { public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button button1; private System.Windows.Forms.TextBox textBox1; private UpdateSession session; private UpdateSearcher searcher; private int count; private IUpdateHistoryEntryCollection history; private System.ComponentModel.Container components = null; public Form1() { InitializeComponent(); SecurityPermission sp = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode); sp.Demand(); PermissionSet fullTrust = new PermissionSet(PermissionState.Unrestricted); fullTrust.Demand(); session = new UpdateSession(); searcher = session.CreateUpdateSearcher(); count = searcher.GetTotalHistoryCount(); history = searcher.QueryHistory(0, (count - 1)); } protected override void Dispose(bool disposing) { if(disposing) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.textBox1 = new System.Windows.Forms.TextBox(); this.SuspendLayout(); this.button1.Location = new System.Drawing.Point(216, 240); this.button1.Name = "button1"; this.button1.TabIndex = 0; this.button1.Text = "Scan"; this.button1.Click += new System.EventHandler(this.button1_Click); this.textBox1.Dock = System.Windows.Forms.DockStyle.Top; this.textBox1.Location = new System.Drawing.Point(0, 0); this.textBox1.Multiline = true; this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(292, 232); this.textBox1.TabIndex = 1; this.textBox1.Text = ""; this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.textBox1); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } [STAThread] static void Main() { Application.Run(new Form1()); } private void button1_Click(object sender, System.EventArgs e) { for (int i = 0; i < count; ++i) { textBox1.Text += history[i].Title + "\n"; } // for loop return; } } } 

请修改下面的代码行 – 希望它能工作。

 private void button1_Click(object sender, System.EventArgs e) { for (int i = 0; i < count - 1; ++i) { textBox1.Text += history[i].Title + "\n"; } // for loop return; }