2016-11-09 2 views
2
gefunden

Ich versuche, ein Verfahren zur Herstellung des neuen WUAPI IUpdateInstaller4 für Windows verwenden 10. Ich es hier:IUpdateInstaller4 :: commit nicht

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

Aber alles, was ich habe versucht, fehlgeschlagen:

Die Erstellung eines dynamischen Objekts ist mit "keine Definitionsausnahme" fehlgeschlagen. Beispiel:

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

Die Erstellung eines neuen Typs lib enthielt das Interface nicht.

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

Jede Hilfe oder Hinweis wäre toll.

+0

Überprüfen Sie diesen Thread (enthält auch eine Problemumgehung): https://social.msdn.microsoft.com/Forums/Lync/en-US/92ddcc93-fcf3-4b60-8ca3-e3dbbdee77cf/iupdateinstaller4-missing-in-wuapilib? forum = csharpgeneral – Evk

+0

@Evk - wie Hans in seiner Antwort sagte, funktioniert die Problemumgehung nur, wenn Sie wissen, was zu definieren ist, aber die Schnittstelle IUpdateInstaller3 Schnittstelle fehlt von der Oberfläche der bekannten Welt (Nr. H, Nr. IDL, Nr. tlb, kein doc, nein nichts) –

Antwort

3

ich Repro. Mit Win10-Version 1607 können Sie das sicherlich nicht erreichen, die in wuapi.dll eingebettete Typbibliothek enthält die Schnittstellen IUpdateInstaller3 und IUpdateInstaller4. Etwas, das Sie selbst sehen können, wenn Sie Oleview c:\windows\system32\wuapi.dll von der Entwickler-Eingabeaufforderung ausführen.

Nicht das einzige Problem, beachten Sie die Wuapi_p.h Header-Datei im MSDN-Artikel zitiert. Es fehlt auch die Win10 SDK-Version, die ich auf meinem Computer installiert habe (Version 10.0.10586.0). Es ist eine neuere Version verfügbar (14393). Beachten Sie, dass es aufgrund der schrecklichen Installationsprobleme, die ich mit der vorherigen Version hatte, vermieden wurde.

Nicht das einzige Problem, MSDN fehlt die Definition von IUpdateInstaller3. Das macht es schwer zu erraten, wie die fehlenden Schnittstellen in C# korrekt deklariert werden. Sie könnten punten und erraten, dass IUpdateInstaller3 nur eine weitere Methode hinzugefügt hat.

Es jedoch tut implementieren Sie die Schnittstelle. Abfragt für den IID dokumentiert in dem MSDN-Artikel mit funktioniert auf meinem Rechner:

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 
    } 
} 

Aber das wird dir nicht helfen, den Anruf zu tätigen, nicht ohne die Schnittstellendefinitionen. Dies sind typische "agile" Probleme, die so häufig bei Microsoft auftreten. Das Grobe ist, dass du das zu früh machst, die nächste Veröffentlichung könnte besser sein. Einige Chancen, dass dies Windows Server 2016 sein wird, derzeit in Technical Preview. Wenn Sie die Schnittstellen selbst deklarieren möchten, beachten Sie, dass Ihre IUpdateInstaller4-Deklaration alle Methoden der vorherigen Schnittstellenversionen enthalten muss. Die Schnittstellenvererbung funktioniert nicht.

Verwandte Themen