C# 我很难比较两个列表。该程序的目的是执行脱机修补程序安装
问题是循环出现的。它似乎在wmi qfe列表和KB列表之间执行比较。我遇到的问题是获取并搜索.msu文件名列表中的内容以查找KB,然后安装它。我用python编写了一个类似的程序,并在C代码中模拟了一个类似的结构。如果您能提供有关如何正确使用此功能的任何指导,我们将不胜感激。代码如下:C# 我很难比较两个列表。该程序的目的是执行脱机修补程序安装,c#,C#,问题是循环出现的。它似乎在wmi qfe列表和KB列表之间执行比较。我遇到的问题是获取并搜索.msu文件名列表中的内容以查找KB,然后安装它。我用python编写了一个类似的程序,并在C代码中模拟了一个类似的结构。如果您能提供有关如何正确使用此功能的任何指导,我们将不胜感激。代码如下: static void Server08r2Patches() { var IE9 = from a in IAVA.Worksheet<IE9>("IE9") select a;
static void Server08r2Patches()
{
var IE9 = from a in IAVA.Worksheet<IE9>("IE9") select a;
var Server08r2 = from a in IAVA.Worksheet<Server08r2>("Server08r2") select a;
var KBlist = Server08r2.Select(s=>new {KB = s.KB}).ToList();
var ExeList = Server08r2.Select(s=>new {Executable = s.Executable}).ToList();
string path = (Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)+@"\x64\");
foreach (var item in KBlist)
{
if (OsPatches.Contains(item.KB))
{
Console.WriteLine(item.KB+" is already installed.");
}
else
{
Console.WriteLine(item.KB+" will now be installed.");
foreach (var inst in ExeList)
{
do
{
var kb_inst = new ProcessStartInfo()
{
CreateNoWindow = true,
UseShellExecute = true,
FileName =path+inst.Executable,
WindowStyle = ProcessWindowStyle.Hidden,
Arguments = (@" /quiet /norestart"),
};
try
{
Process update = new Process();
update.StartInfo = kb_inst;
update.Start();
update.WaitForExit();
Console.WriteLine(inst.Executable+" was successfully installed");
}
catch (Exception Ex)
{
Console.WriteLine(Ex.Message+" "+inst.Executable);
}
}
while (inst.Executable.Contains(item.KB) == true);
}
}
}
}
我不太明白问题出在哪里。它崩溃了吗?我不确定您询问的while条件的目的是什么,可执行文件的文本内容是否包含item.KB的字符串?此外,我还以为ExeList是一个为特定知识库安装的可执行文件列表,但它似乎对所有知识库都是一样的?它进入了一个无限循环。我最初没有while循环,而是使用if语句,但是if语句会导致null引用异常。