2010-08-09 59 views
1

我們需要將我們的應用程序調整爲可通過ClickOnce使用。該應用程序由一個.exe文件和一大套Visual C++庫組成,其中一些是其他庫使用的進程內COM服務器。什麼是並排COM的限制?

目前我們的安裝程序做了regsvr32來註冊COM服務器,但看起來像ClickOnce應用程序不允許在安裝過程中修改註冊表。所以我們需要別的東西。

選項一是刪除CoCreateInstance()而改爲使用LoadLibraryEx()/DllGetClassObject()。這將需要修改代碼,但是非常可靠 - 我沒有看到任何理由不起作用。

選項二是對清單使用並行COM激活。我立即看到的問題是,我們在每個每晚構建中增加版本號,因此我們將不得不自動更新清單。這不是很鼓舞人心。使用並行COM激活的其他不太明顯的限制是什麼?

+0

爲什麼你需要更新清單?清單中至關重要的一點是CLSID到dll的映射,有一些彙編版本號需要考慮,但是它們沒有與dll嵌入的版本號進行交叉檢查,所以清單一旦設置就會滯後很多。 – 2010-08-09 10:39:35

+0

@Chris Becke:真的嗎?我總是期待徹底檢查版本,以避免DLL地獄。 – sharptooth 2010-08-09 10:55:31

+0

重要的是.manifest文件中的版本號,而不是DLL中的版本信息。如果它更容易,您可以將所有.manifest版本號設置爲1.0.0.0。 – 2010-08-09 11:31:37

回答

1

並行COM的優勢在於它可以解決您的問題,而無需更改任何代碼 - 可以將並排COM改裝爲一組現有的COM組件。

的缺點:

  • 並排側是不是一個廣泛使用的技術(一對部件的外面,如VC++運行庫和Windows公共控件,不使用COM),並且在網絡上查找故障排除信息需要一些努力
  • 如果您使用的是XP或Server 2003,那麼在出現問題時您無法從操作系統獲得幫助。特別是,XP會在事件日誌中給出誤導消息; 2k3更好。 Vista及以上版本爲您提供sxstrace工具。
  • 您需要維護清單文件與組件本身並行。在許多方面,清單文件已經在類型庫中複製了信息。儘管您可以手動維護這些文件(它們是具有相當簡單的模式的XML文件),但您可能希望在每次構建時重新生成它們。這照顧了版本控制問題。
+0

不是這樣。 OP開始錯了,他在談論無reg的COM,而不是winsxs。 – 2010-08-09 11:29:34

+0

他們使用相同的機制 - 免註冊COM是WinSxS的一個子集 – 2010-08-09 11:30:23

+0

它不是。他們都使用清單,這是相似之處的結束。 – 2010-08-09 11:32:25