2014-01-24 27 views
2

作爲構建過程的一部分,幾個dll和tlb通過regsvr32註冊到COM。在構建結束時有一個步驟,它取消註冊dll和tlb的相同列表。但是,如果構建失敗,則該步驟不會運行。取消註冊沒有文件存在的dll

問題是,後續的構建並不總是使用相同的構建路徑,並且由於他們在錯誤的地方查找註冊的dll(因爲它們仍然在以前失敗的構建中在COM中註冊),項目構建失敗。

簡單的解決方案是確保取消註冊腳本在每個構建的末尾運行,而不管失敗或通過,但這對於構建工具來說並不那麼容易。如果沒有原始源文件存在於註冊路徑中,是否有另一種方法可以取消註冊dll的/ tlb?

回答

1

你不需要使用與你註冊的dll相同的DLL來調用註銷,你只需要知道你正在註銷的dll在其DllUnregisterServer方法中刪除了與DllRegisterServer方法中丟失的dll文件相同的類。

考慮到這一點,你應該能夠使用新路徑的DLL註銷舊路徑的DLL。

也許試着在註冊之前改變你的構建過程以註銷dll,它會在註冊正確的DLL之前清理對丟失dll的懸掛引用,你應該很好。