如果建立的AciveX exe设定为远程服务器文件,先编译并生成exe文件。将exe文件在另一台服务器上注册后,如何去引用这只组件(本机部注册)我引用了.tlb文件后无效。

解决方案 »

  1.   

    就这样用的,不过该如何配置DCOM(有没有关于DCOMCNFG.exe配置的相关文档)
      

  2.   

    DCOM的學習和配置
    概述COM:
    COM的分類:以VB的來講
        Dll---進程內的COM
        Exe—進程外的COM
        Ocx—控件
    一、 DCOM的應用
    跨網域的分布式,負載平衡的應用,應用的擴展性及本身有應用程序就是分布式的
    二、COM與DCOM的區別和聯系 
    COM DCOM
    運行的地點 本地执行 网络上的另一台计算机上执行
    存在形式 动态连接库 执行程序
    通信方式 不用RPC远程调用 使用RPC远程调用
    調用方式 同一線程,调用速度快 不同線程,速度慢
    安全性 安全性不高 安全全性高
    复杂性 配置簡單 配置较复杂
    联系:
    客户程序不必知道COM的存在形式
    有统一的接口调用方式
    客户程序甚至不知道COM对象的位置 
    三、DOCM的表現方式:LPC 和 RPC位置的通透性
    HRESULT 是DCOM的傳回值
    四、COM 與注冊表的關系
    服務器端與客戶端要有一個相同的CLSID,客户端不需要知道他是調用本機上還是服務器上的COM,客户端仅仅需要知道组件的CLSID和APPID裡的RemoteServerName 。
    微软提供了设置DCOM的工具DCOMCNFG.EXE,用来设置远程服务器,而不用手动修改注册表,我們在下面會介紹它怎麼使用的。
    五、使用 Visual Basic 建立 DCOM 主從架構應用程式例子
    建立伺服器
    建立新的 Visual Basic 專案。在 [新增專案] 對話方塊中,選取 [ActiveX 執行檔] ,然後按一下 [開啟舊檔] 。根據預設值隨即建立 Class1。 
    1. 將下面程式碼新增至 Class1 模組中: 
    2. Public Function ServerTime() As String
    3.     ServerTime = Time
    End Function
    4. 在 [專案] 功能表上,按一下 [Project 屬性] 選項,然後選取 [一般] 標籤。 
    5. 在 [專案名稱] 欄位中,輸入: DCOMDemo_Svr 。 
    6. 在 [專案描述] 欄位中,輸入: DCOMDemo_Svr - Server 。核取 [執行時無使用者介面] 選項。 注意 :如果伺服器沒有任何 UI 可以確認伺服器在執行時沒有顯示任何類型的對話方塊,就應該要核取此選項。如果在非「互動使用者」登入的情況下執行伺服器,而出現任何類型的使用者互動,伺服器可能會掛掉。 
    7. 選取 [元件] 標籤,然後核取 [遠端伺服器檔案] 選項。 注意 :核取此選項會讓 Visual Basic 編譯器產生封裝會使用此伺服器的用戶端應用程式所需的 VBR 與 TLB 檔。這些檔案包含需要加入用戶端電腦上的登錄項目。 
    8. 關閉 [專案屬性] 對話方塊。 
    9. 在 [檔案] 功能表上,選取 [另存新檔] ,然後將此專案新增至 c:\DCOMDemo\Server 資料夾。 
    10. 在 [檔案] 功能表上,選取 [製成 DCOMDemo_Svr] ,然後編譯此伺服器。 
    11. 在 [專案] 功能表上,選取 [Project 屬性] 選項,然後選取 [元件] 標籤。 
    12. 在 [元件] 標籤上,選取 [版本相容元件] ,選取 [與機器碼相容] 選項,然後讓此專案和您剛才建立的伺服器執行檔 (DCOMDemo_Svr.exe) 的機器碼相容。經由選取此選項,您就是在確認如果重新編譯伺服器,所有的 GUID 都會維持相同。 
    建立用戶端 1. 在 [檔案] 功能表上,選取 [新增專案] 選項,選取 [標準執行檔] ,然後按一下 [確定] 。根據預設值隨即建立 Form1。 
    2. 在 [專案] 功能表上,按一下 [Project 屬性] 選項,然後選取 [一般] 標籤。 
    3. 在 [專案名稱] 欄位中,輸入: DCOMDemo_Cli 。 
    4. 在 [專案描述] 欄位中,輸入: DCOMDemo_Cli Project - Client 。 
    5. 在 [專案] 功能表上,選取 [設定引用項目] 。從可用的設定引用項目清單中,選取 [DCOMDemo_Svr - Server] 。 
    6. 在 Form1 上放置一個指令按鈕,將此按鈕的標題改為 [Run] 。 
    7. 將下面程式碼放入此按鈕的按一下 (Click) 事件中: 
    8.     Dim MyObj As DCOMDemo_Svr.Class1
    9.     
    10.     On Error GoTo err1
    11.     
    12.     Set MyObj = CreateObject("DCOMDemo_Svr.Class1")
    13.     MsgBox "Server Time=" & MyObj.ServerTime & "  Client Time=" & Time
    14.     
    15.     Exit Sub
    16. err1:
    17.     MsgBox "Connection failed: Error " & Err.Number & " - " & Err.Description
    18. 在 [檔案] 功能表上,選取 [另存新檔] ,然後將此專案儲存到用戶端資料夾中 c:\DCOMDemo\Client。 
    19. 按 F5 鍵,在 IDE 中執行用戶端,試試是否可以運作。 
    20. 在 [檔案] 功能表上,選取 [製成 DCOMDemo_Cli] 以編譯此用戶端,然後關閉 Visual Basic。 
    封裝伺服器 
    如同平常一樣,使用「封裝暨部署精靈」來封裝要散發的伺服器。遠端用戶端可以使用 DCOM 來起始此伺服器。建立伺服器封裝時,會出現一個對話方塊,詢問您此伺服器是否要作為 Remote Automation 伺服器,以及如果是作為此用途,您是否要加入支援檔案。請按一下 [否] 按鈕,因為 DCOM 不是 Remote Automation。Remote Automation 是舊式技術,已經被 DCOM 取代。 
    封裝用戶端 
    考慮到伺服器和用戶端不是位於同一部電腦上,在封裝用戶端時您需要採取一些特定步驟。用戶端封裝的變更可確認只安裝了型別程式庫 (.tlb 檔),並加入一些其他的登錄項目,而不是加入伺服器執行檔,用戶端電腦上不需要有伺服器執行檔,因為它不會在那兒執行。 請使用下面步驟來封裝用戶端: 
    1. 啟動「封裝暨部署精靈」,然後選取用戶端的專案。 
    2. 按一下 [封裝] 按鈕,在 [封裝類型] 對話方塊中,選取 [標準的安裝程式] ,然後按一下 [下一步] 。 
    3. 在 [封裝資料夾] 對話方塊中,選取要儲存此封裝的資料夾,然後按一下 [下一步] 。在本範例中,應該是 c:\DCOMDemo\Client\Package。 注意 :您可能會收到一個對話方塊,指出沒有關於伺服器的相依資訊。請按一下 [確定] ,因為此伺服器沒有任何相依檔案。 現在應該已經來到 [包含的檔案] 對話方塊中。 
    4. 請取消選取伺服器的執行檔,DCOMDemo_Svr.exe,因為您不要散發伺服器的執行檔,接著按一下 [加入] 按鈕。 
    5. 在 [檔案類型] 下拉式方塊中選取 [遠端伺服程式檔 (*.vbr)] 。 
    6. 請指向儲存伺服器專案的資料夾 (在本範例中是 c:\DCOMDemo\Server),並選取相關的 VBR 檔,DCOMDemo_Svr.VBR。按一下 [開啟舊檔] , [新增檔案] 對話方塊隨即關閉。請注意,現在加入了兩個檔案:DCOMDemo_Svr.VBR 與 DCOMDemo_Svr.TLB。按一下 [下一步] 按鈕。 注意 :您可以在 [遠端伺服器] 對話方塊中定義執行伺服器的電腦的名稱 (網路位址)。通常會將此欄位留白,因為您可能無法事先知道伺服器會安裝在哪裡。如果將此欄位留白,安裝用戶端時就會出現提示要您輸入此資訊。在本範例中,請將此欄位留白。 
    7. 按一下 [下一步] 繼續進行。您現在可以依照「封裝暨部署精靈」的標準程序來繼續進行。在本範例中,請在所有剩下的對話方塊中按一下 [下一步] 即可。 
    安裝伺服器 
    使用之前建立的散發程式,在想要執行伺服器的電腦上安裝伺服器。如果您想要使用開發程式用的電腦來執行伺服器,就不需要執行安裝了,因為 Visual Basic 在編譯伺服器時就已經執行註冊了。 
    安裝用戶端 
    使用之前建立的散發程式,在想要執行用戶端的電腦上安裝用戶端。因為此用戶端使用 DCOM 伺服器,而您在建立散發程式時沒有提供伺服器的實際位置,現在就需要提供此資訊了。當安裝程式要您輸入位置時,請輸入安裝伺服器的電腦的名稱。 
    設定伺服器的安全性 
    1. 运行NT服务器上的DCOMCNFG程序,进行DCOM配置。
    2. 进入DCOM的应用程序页面,选择“DcomDemoSvr”。
     
    3. 进入DCOM的默认属性页面,将“在这台计算机上启用分布式COM”打上勾,将默认身份级别改为“无”。
     4. 进入DCOM的默认安全机制页面,确认默认访问权限和默认启动权限中的默认值无EveryOne,如果不去掉EveryOne,应用服务器不能正常启动。
    默认访问权限如图: 默认启动权限如图: 默认配置权限如图: 5. 在应用程序页面双击“DcomDemoSvr”或点击“属性”,打开应用服务器DCOM属性设置。
    6. 将常规页面中的身份验证级别改为“无”。
     7. 位置页面中选上“在这台计算机上运行应用程序”。
     
    8. 将安全性页面设置中,均选择“使用自定义访问权限”,编辑每一个权限,将EveryOne加入用户列表中。
    9. 身份标识页面中,选择“交互式用户”。
     10. GUEST用户不能禁用。 
    設定客戶端:
      你也可以不用安裝程序來安裝客戶端,可以用服務器生成的vbr文件和CliReg32.exe來設定客戶端。
    1,新增注冊表的Appid對應的CLSID來指定遠端的電腦,在每個CLSID下面新增字串上Appid的字串值。然後用DcomCnfg.exe來配置。當你配置好時,CLSID下的LocalServer32子鍵值改名為_ LocalServer32
    2,也可以用CreateObject(class,RemoteServerName),建議用這種方式,因為用了這種方式可以提供負載平衡或容錯支持等強固的特色
    五、跨DBMS的事務程序設計
    Coordinating Transaction Manager CTM
    Resource Manager RM
    Participating Transaction Manager PTM使用DTC執行一個分布式的交易時,你有兩種選擇,一:使用MTS的TM。 二、直接和DTC溝通的應用程序
    六、Message Query 程序設計語言