如何使用C#查询安装在计算机上的Windows更新的准确和本地化列表?
我将精确定义为匹配Windows 7中"程序和功能"下Microsoft的"View Installed Updates"对话框的"Microsoft Windows"类别中显示的内容.
如果我使用WUApi.DLL,信息将被返回本地化但我无法获得准确的列表.在WUApi.dll的情况下,一些修补程序丢失,如果已卸载更新,它仍会显示在由以下代码生成的列表中:
public static void GetWindowsUpdates()
{
var updateSession = new UpdateSession();
var updateSearcher = updateSession.CreateUpdateSearcher();
var count = updateSearcher.GetTotalHistoryCount();
if (count == 0)
return;
var history = updateSearcher.QueryHistory(0, count);
for (int i = 0; i < count; i++)
{
if (history[i].ResultCode == OperationResultCode.orcSucceeded)
{
Console.WriteLine(history[i].Title);
if (history[i].Operation == UpdateOperation.uoUninstallation)
{
Console.WriteLine("!!! Operation == uninstall"); // This is never true
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
WUApi搜索方法也未使用以下代码提供准确的列表:
WUApiLib.UpdateSessionClass session = new …Run Code Online (Sandbox Code Playgroud) 我们想挂钩调用LoadLibrary以下载未找到的程序集.我们有一个处理托管程序集的ResolveAssembly处理程序,但我们还需要处理非托管程序集.
我们尝试通过"编写Microsoft Windows编程应用程序"中指定的技术重写import表来挂钩LoadLibrary调用,但是当我们调用WriteProcessMemory()时,我们得到一个权限被拒绝错误(998).(是的,我们正在使用提升的私人运行)
在加载CLR时是否有人成功重写了import表?谁能指出我正确的方向?
更新:我们解决了权限被拒绝的问题,但现在当我们迭代混合程序集的Imports表(托管+非托管)时,我们找到的唯一条目是mscoree.dll.有谁知道如何找到原生进口?(我们在C++/CLI中工作).