我們需要將我們的應用程序調整爲可通過ClickOnce使用。該應用程序由一個.exe文件和一大套Visual C++庫組成,其中一些是其他庫使用的進程內COM服務器。什麼是並排COM的限制?
目前我們的安裝程序做了regsvr32
來註冊COM服務器,但看起來像ClickOnce應用程序不允許在安裝過程中修改註冊表。所以我們需要別的東西。
選項一是刪除CoCreateInstance()
而改爲使用LoadLibraryEx()
/DllGetClassObject()
。這將需要修改代碼,但是非常可靠 - 我沒有看到任何理由不起作用。
選項二是對清單使用並行COM激活。我立即看到的問題是,我們在每個每晚構建中增加版本號,因此我們將不得不自動更新清單。這不是很鼓舞人心。使用並行COM激活的其他不太明顯的限制是什麼?
爲什麼你需要更新清單?清單中至關重要的一點是CLSID到dll的映射,有一些彙編版本號需要考慮,但是它們沒有與dll嵌入的版本號進行交叉檢查,所以清單一旦設置就會滯後很多。 – 2010-08-09 10:39:35
@Chris Becke:真的嗎?我總是期待徹底檢查版本,以避免DLL地獄。 – sharptooth 2010-08-09 10:55:31
重要的是.manifest文件中的版本號,而不是DLL中的版本信息。如果它更容易,您可以將所有.manifest版本號設置爲1.0.0.0。 – 2010-08-09 11:31:37