2016-11-09 32 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聲明必須包含以前接口版本的所有方法,但接口繼承無法工作。