2016-11-09 36 views
2

我试图使用新WUAPI IUpdateInstaller4的方法适用于Windows 10,我发现在这里: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); 

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

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

任何帮助或提示将是伟大的。

+0

检查该主题(还包含解决方法):https://social.msdn.microsoft.com/Forums/Lync/en-US/92ddcc93-fcf3-4b60-8ca3-e3dbbdee77cf/iupdateinstaller4-missing-in-wuapilib?论坛= csharpgeneral – Evk

+0

@Evk - 正如Hans在他的回答中所说的那样,解决方法只在你知道要定义什么时才起作用,但是中间层IUpdateInstaller3接口在已知世界的表面上缺失(no .h,no .idl,no。 tlb,没有文档,没有什么) –

回答

3

我重放。你当然不能在Win10版本1607上进行这种操作,嵌入在wuapi.dll中的类型库缺少IUpdateInstaller3和IUpdateInstaller4接口。当您从开发人员命令提示符运行Oleview c:\windows\system32\wuapi.dll时,您可以看到自己的一些东西。

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

不是唯一的问题,MSDN缺少IUpdateInstaller3的定义。这使得很难猜测如何正确地声明C#中缺少的接口。你可以踢,并猜测IUpdateInstaller3只是增加了一个方法。

然而确实实现接口。查询其使用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 
    } 
} 

但是,这不会帮助您拨打电话,不无接口定义。这些都是典型的“敏捷”问题,这是微软今天开展业务的一个常见问题。粗糙和摔倒是你这么做太早,下一次发布可能会更好。一些可能性,这将是Windows Server 2016,目前在技术预览。如果要通过自己声明接口来解决它,请记住,您的IUpdateInstaller4声明必须包含以前接口版本的所有方法,但接口继承无法工作。