gpt4 book ai didi

c# - IUpdateInstaller4::提交未找到

转载 作者:行者123 更新时间:2023-11-30 21:45:04 25 4
gpt4 key购买 nike

我正在尝试使用适用于 Windows 10 的新 WUAPI IUpdateInstaller4 的方法。我在这里找到了它:

https://msdn.microsoft.com/en-us/library/windows/desktop/mt694207(v=vs.85).aspx

但是我所有的尝试都失败了:

创建动态对象失败,出现“无定义异常”。示例:

dynamic installAgent = Activator.CreateInstance(Type.GetTypeFromProgID("Microsoft.Update.Installer"));
installAgent.Commit(IntPtr.Zero);

新类型库的创建不包含接口(interface)。

tlbimp.exe wuapi.dll /out=c:\_sandbox\WUApiInterop.dll 

任何帮助或提示都会很棒。

最佳答案

我复制。你肯定不能在 Win10 1607 版本上进行此操作,wuapi.dll 中嵌入的类型库缺少 IUpdateInstaller3 和 IUpdateInstaller4 接口(interface)。当您从开发人员命令提示符运行 Oleview c:\windows\system32\wuapi.dll 时,您可以亲眼看到一些东西。

不是唯一的问题,请注意 MSDN 文章中引用的 Wuapi_p.h 头文件。它还缺少我在我的机器上安装的 Win10 SDK 版本(版本 10.0.10586.0)。有更新版本可用 (14393)。请注意,如果它包含它,我一直在避免使用它,因为我在之前的版本中遇到了可怕的安装问题。

不是唯一的问题,MSDN 缺少 IUpdateInstaller3 的定义。这使得猜测如何在 C# 中正确声明缺失的接口(interface)变得非常困难。您可以猜测 IUpdateInstaller3 只是又添加了一种方法。

然而,它确实实现了接口(interface)。使用 MSDN 文章中记录的 IID 查询它在我的机器上工作正常:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

class Program {
static void Main(string[] args) {
var obj = new WUApiLib.UpdateInstaller();
var punk = Marshal.GetIUnknownForObject(obj);
var iid4 = new Guid("EF8208EA-2304-492D-9109-23813B0958E1");
IntPtr itf4;
var hr = Marshal.QueryInterface(punk, ref iid4, out itf4);
Debug.Assert(hr == 0 && itf4 != IntPtr.Zero); // fine
}
}

但是如果没有接口(interface)定义,那将无法帮助您进行调用。顺便说一句,这些是典型的“敏捷”问题,是微软如今开展业务的常见问题。麻烦的是你做得太早了,下一个版本可能会更好。有可能是 Windows Server 2016,目前处于技术预览阶段。如果您打算通过自己声明接口(interface)来解决此问题,请记住您的 IUpdateInstaller4 声明必须包含以前接口(interface)版本的所有方法,接口(interface)继承无法工作。

关于c# - IUpdateInstaller4::提交未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40513440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com