2013-02-27 37 views
1

我已經在C#中創建了一個COM對象,後來被VBScript使用。爲了VBScript能夠實例化對象,它必須被註冊。以前我使用任何.NET Framework提供的RegAsm工具手動註冊對象。如何使我的C#DLL自注冊dll

但是,我現在正在創建一個安裝程序,以便我可以在不同的機器上安裝此對象,並且當我使用InstallShield 2012 Spring Express時,它警告我該dll不是自注冊的。

如何讓我的DLL自注冊?我找到了使用C#中的Process對象調用RegAsm的人們的指南和示例,但我的對象不是可執行文件。

回答

5

自定義操作和自我註冊是不是最佳實踐。

如果InstallShield的版本不支持COM互操作,運行以下命令:

regasm foo.dll /regfile:foo.reg

現在導入.reg文件到InstallShield和調整的東西文件foo .dll到[INSTALLDIR] foo.dll。

如果您的InstallShield版本不支持導入reg文件,請在記事本中編輯並手動將值輸入InstallShield。

這是最乾淨的方法,因爲您不會有任何自定義操作失敗,並且由於MSI正在處理註冊,所以它知道如何卸載和回滾數據。

1

如果您使用InstallShield,則可以要求InstallShield註冊您的typelib。在組件 - >您的DLL - >.NET設置 - >設置.NET COM互操作爲是。

InstallShield setting screenshot

如果您使用的是InstallShield版本不支持這個,寫一個叫RegAsm.exe註冊您的DLL自定義操作。

+0

我的InstallShield版本不支持上面的內容。自定義操作的外觀如何?我有我的DLL安裝在一個靜態位置,用戶不能改變它,這意味着我需要的只是知道如何調用自定義操作中的regasm。我如何找到regasm的路徑等? – Tada 2013-02-27 06:04:53

+0

@Tada看看這篇文章是否有幫助。 http://shieldmaster.wordpress.com/2010/07/26/primer-on-creating-installscript-custom-actions/創建自定義操作需要InstallShield的一些知識。 – 2013-02-27 06:54:15

+0

@Tada按照本文,http://kb.flexerasoftware.com/doc/Helpnet/isxhelp12/IDlgFilePropertiesComNetSettings.htm InstallShield Express也支持.NET註冊。所以你的版本沒有理由不支持它。 – 2013-02-27 06:56:11