我正在编写代码,以便在企业内部网中使用安全修补程序自动修补Windows操作系统。 (我正在使用Visual Studio .NET,因此使用.NET Framework 1.1,并使用c#进行开发。)
作为第一步,我想列出已使用WUApi应用于系统的修补程序。我添加了对“tlbimped”wuapi.dll的引用,我还用regsvr32注册了原始的dll,windows更新服务似乎已经启动并在服务管理器中运行,但代码拒绝工作:它返回零作为应用修补程序的数量,即使在应用修补程序后,它也会在到达“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;
}
}
}
答案 0 :(得分:1)
请修改以下代码行 - 希望它能正常工作。
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;
}