2010-01-22 60 views
3

我有一個調用Web服務的Excel UDF。 UDF代碼是一個自動化插件代碼,它是一個C#類庫,我爲它創建了一個安裝程序。當我運行這個設置時,沒有參考特定的插件代碼出現在toos - > addins - > automation addins excel列表中,並且該函數不會在編輯欄中出現apepar。我正在使用VS 2008和Excel 2003.部署Excel UDF

我在這裏錯過了什麼嗎?我是否應該定義Excel從中選擇dll的路徑,以便它指向由udf代碼生成的dll?或者是否有任何安全問題需要處理?客戶端計算機的安全級別設置爲「完全信任」,但插件未顯示在列表中。

我在這裏錯過了什麼嗎?

+1

對不起,但我也不是很確定我是如何做到表示我的滿意! – Sandy 2010-01-25 06:50:15

回答

6

發生這種情況是因爲安裝自動加載項需要在註冊表中創建自定義的「CLSID {GUID} \ Programmable」條目,該條目在創建自動加載項時通常通過包含標記爲你班上的 ComRegisterFunctionAttribute ComUnregisterFunctionAttribute。當您在程序集上運行RegAsm時,這些類會被註冊。

但是,使用Visual Studio安裝程序包時,會忽略ComRegisterFunctionAttribute和ComUnregisterFunctionAttribute。發生這種情況是因爲安裝項目使用/ regfile開關運行RegAsm以生成包含所有必需註冊表項的.reg文件。這是.reg文件,然後在.msi包在客戶端站點上運行時使用。問題是,當RegAsm通過/ regfile開關運行時,生成的.reg文件不包含由用戶定義的寄存器函數(例如,使用ComRegisterFunctionAttribute和ComUnregisterFunctionAttribute標記的函數)所做的任何註冊表更新。

因此,您的自定義「CLSID {GUID} \ Programmable」註冊表項未被創建,因此,自動化加載項未顯示在自動化加載項列表中。

要解決這種情況,您必須通過其他方式創建自己的自定義「CLSID {GUID} \ Programmable」條目。使用安裝程序包的Registry Editor部分來做到這一點最簡單。

正確處理自動化加載項的安裝程序包的所有步驟有點複雜。幸運的是,我已經一步一步地解釋瞭如何做到這一點(以及更詳細的描述爲什麼會發生這種情況),作爲對這個問題的回答:How to get COM Server for Excel written in VB.NET installed and registered in Automation Servers list

希望這會有所幫助!

Mike

+0

我遵循你所描述的程序,但仍然沒有運氣。我的GUID出現在CLSID下的註冊表編輯器列表中,但該DLL並未出現在自動化插件列表中 – Sandy 2010-01-25 06:45:04

+1

我不知道該說些什麼,除非您必須非常仔細地遵循這些說明。如果你這樣做,你應該在註冊表中看到一個「CLSID {GUID} \ Programmable」條目,這是關鍵。確保是這種情況,如果沒有,請嘗試再次按照說明操作,如下所述:http://stackoverflow.com/questions/1506858/how-to-get-com-server-for-excel-寫在vb-net-installed-and-registered-in-aut/1506932#1506932 – 2010-01-25 12:40:08

+0

@Mike這裏可以GUID是什麼東西?假設我可以擁有這樣一個GUID,「{ExcelAutomationFunction}」,不是嗎? – woodykiddy 2011-08-31 05:48:36