2014-09-29 41 views
4

我已經成功地使用C++和C#使用清單文件(即早期綁定)來使用免註冊COM。我現在試圖使用後期綁定來實現這個功能。經過大量網絡搜索,我發現的技術似乎是使用「Microsoft.Windows.ActCtx」。Reg-Free COM「Microsoft.Windows.ActCtx」是否支持腳本 - 後期綁定?

我用來測試這個的一個例子是MS的「基於COM的組件的免註冊激活」,在http://msdn.microsoft.com/en-us/library/ms973913.aspx上找到以生成SideBySide示例。然後我嘗試使用腳本語言;然而,VBScript和Python都以相同的方式失敗(也嘗試過VBA)。

Set actctx = CreateObject("Microsoft.Windows.ActCtx") 
actctx.manifest = "C:\test\client.exe.manifest" 

Set SBSObj = actctx.CreateObject("SideBySide.SideBySideClass") 
wscript.echo SBSObj.Version 

使用像Sysinternals的‘過程監控’你可以看到,運行以下命令(Windows 7的64位):VBScript的例子如下

C:\Windows\SysWOW64\cscript.exe //Nologo C:\test\VBRegFreeTest.vbs 

出現通過加載工作體現並嘗試開始尋找等效的註冊表調用,但無法找到它們。所以它似乎部分工作。我還將wScript.exe複製到本地目錄以排除運行應用程序和清單文件的目錄問題。

我讀過Microsoft.Windows.ActCtx on Windows Xp,並在清單中包含了「prodID」,但仍然失敗。清單文件在C++和C#示例中正常工作。

我不禁感覺到「Microsoft.Windows.ActCtx」有問題。這方面的文件非常有限。非常感謝在Python或VBScript中使用清單文件的任何幫助。我很想知道是否有人有「Microsoft.Windows.ActCtx」的工作。

回答

1
  1. 您的EXE必須具有描述COM服務器名稱和版本的依賴性部分的清單,例如, SideBySide.dll。
  2. 如果您的EXE有內部清單:Windows 7將不會讀取外部清單,如果存在內部清單(Windows XP首先查找外部清單)。
  3. 在Windows 7上,EXE的內部清單必須依賴於COM服務器進行更改,否則內部清單必須從EXE中刪除。這可能與Visual Studio中的mt.exe有關。
  4. SideBySide.dll和SideBySide.dll.manifest必須與EXE位於同一文件夾中。
  5. SideBySide.dll.manifest必須在comClass部分包含COM服務器的progID。

的VBS代碼實施例,使用從DLL:Registration-Free Activation of COM Components: A Walkthrough

Dim o 
Set o = CreateObject("Microsoft.Windows.ActCtx") 

//in example here is a manifest reference: o.manifest = "SideBySide.X.manifest" 
//but it does not function by me. By me a dependency is described in manifest of EXE. 

Dim obj 
Set obj = o.CreateObject("SideBySideLib") 
Call MsgBox(obj.Version()) 
Set obj = Nothing 
Set o = Nothing