I repro。あなたは確かにWin10バージョン1607でこれを行うことはできません.wuapi.dllに埋め込まれたタイプライブラリには、IUpdateInstaller3とIUpdateInstaller4の両方のインターフェイスがありません。開発者コマンドプロンプトからOleview c:\windows\system32\wuapi.dll
を実行すると、あなた自身が見ることができるものです。
唯一の問題ではなく、MSDNの記事で引用されているWuapi_p.h
ヘッダーファイルに注意してください。私のマシン(バージョン10.0.10586.0)にインストールしたWin10 SDKのバージョンもありません。新しいバージョンが用意されています(14393)。それが含まれている場合は、以前のリリースでインストールしたときの恐ろしいインストールの問題のために、これを避けていたことに注意してください。
唯一の問題ではなく、MSDNにIUpdateInstaller3の定義がありません。そのため、C#で欠落しているインターフェイスを正しく宣言する方法を推測することが難しくなります。 IUpdateInstaller3がちょうどもう1つの方法を追加したことをあなたは打ち明けて推測することができます。
しかし、は、がインターフェイスを実装します。
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
}
}
しかし、それはあなたがいないインターフェース定義せずに、電話をかける助けにはなりません:MSDNの資料に記載IIDを使用して、それをクエリすると、私のマシン上で正常に動作します。これらは典型的な「アジャイル」問題btwであり、マイクロソフトが最近ビジネスを行っているような一般的な問題です。荒いと転倒は、あなたがこれを早すぎることをしている、次のリリースが良いかもしれないということです。これはWindows Server 2016となる可能性がありますが、現在技術プレビューにあります。自分自身でインターフェイスを宣言して回避しようとする場合は、IUpdateInstaller4宣言に以前のインターフェイスバージョンのすべてのメソッドを含める必要があることに注意してください。インターフェイスの継承は機能しません。
このスレッドをチェックしてください(回避方法もあります):https://social.msdn.microsoft.com/Forums/Lync/en-US/92ddcc93-fcf3-4b60-8ca3-e3dbbdee77cf/iupdateinstaller4-missing-in-wuapilib?フォーラムがcsharpgeneral – Evk
@エヴァーク - ハンスは答えたところで、回避策は何を定義するか分かっているときにのみ機能しますが、仲介IUpdateInstaller3インターフェイスは既知の世界の表面にはありません(.h、no .idl、no。 tlb、no doc、no nothing) –