2013-04-05 56 views
1

我有一個COM可見的DLL適用於32位和64位體系結構,我用它來添加一個菜單項到Windows資源管理器上下文菜單。使用「regasm myassembly.dll/codebase」我註冊該DLL並看到新的菜單項。大。取消註冊也可以正常工作。regasm/codebase的作品,但與regasm/codebase/regfile生成的文件不

現在我想創建一個.reg文件,以便我可以將菜單項添加到非開發計算機。我使用「regasm myassembly.dll/codebase/regfile」生成一個reg文件,我可以用regedit導入。問題是,在導入.reg之後,我看不到菜單圖標。爲什麼註冊失敗?注意我在64位系統上。

+1

大概是一個64/32位的東西,另請參見http://stackoverflow.com/questions/8172392/regasm-regfile-switch-not-giving-same-output-as-codebase-switch – AardVark71 2013-04-05 13:07:38

+0

我認爲這很可能案子。在註冊regasm之後,我將不得不查看註冊表,然後在使用.reg之後查看差異。 – Coder1095 2013-04-05 15:13:01

回答

2

註冊一個shell擴展需要編寫比註冊一個[ComVisible] .NET程序集通常需要的更多的註冊表項。
您還必須使用Explorer讀取的write the keys來發現擴展。
您完全沒有提及您是如何照顧的,通常需要自定義[ComRegisterFunction]。但是,由於自定義註冊函數需要運行代碼,因此.reg文件不會包含這些鍵。

+0

感謝您的輸入。我正在使用[SharpShell](http://www.codeproject.com/Articles/512956/NET-Shell-Extensions-Shell-Context-Menus)來處理惡意工作,所以我只需要註冊com可見在這種情況下組裝。 – Coder1095 2013-04-05 14:53:23

+0

是的,它有一個[ComRegisterFunction]。顯然,你不會得到它在你的.reg文件中寫入的密鑰。 – 2013-04-05 15:27:12

2

你應該知道這是一個真正的壞主意。請閱讀這個主題的經典文章。

http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx

那麼這個新的更新:

http://blogs.msdn.com/b/oldnewthing/archive/2013/02/22/10396079.aspx

即使你堅持要嘗試這個(或一個外接如果大會的目的是爲其他的東西),它仍然是一個嘗試使用.reg文件註冊程序集的想法很糟糕。

除了用於裝配工作的COM註冊之外,還有很多事情需要發生。很可能你必須將其添加到GAC,以便.NET可以找到它。此外,未來版本的.NET可能需要在註冊表中添加更多信息或不同的信息。即使在今天(我懷疑),REGASM可能需要將不同的信息放在不同的環境中(x86與x64)。

+0

感謝您的信息。還有一些關於這個[這裏]的文章(http://sharpshell.codeplex.com/wikipage?title=Managed%20Shell%20Extensions&referringTitle=Documentation),並不是所有這些都忽略了這個想法。 reg文件由regasm自己生成,應該簡單地複製工具對註冊表所做的更改。也不需要將dll添加到GAC,因爲「/ codebase」標誌將dll的位置存儲在註冊表中。這是說我會看看替代品,因爲這證明是麻煩的。 – Coder1095 2013-04-05 15:05:38

+1

@Matt,謝謝你指出這個鏈接。對於明顯相互矛盾的觀點,這是一個有趣的總結。顯然這個人做了大量的研究。就我個人而言,我必須服從MS的官方指導 - 這是官方的理由 - 以及Raymond Chen的立場,我對此深表敬意。也許我可以從我的帖子中撤回其中一個「真正」,作爲妥協:-) – 2013-04-06 03:09:10

相關問題