2015-09-05 47 views
0

我正在尋找MindJet MindManager的一些技術幫助。我一直在爲MindJet MindManager玩幾天的插件。我以前寫過我自己的宏,我想把它們變成插件。到目前爲止,我還沒有找到關於創作加載項的很多信息。如何註冊MindJet MindManager插件?

我已經能夠從頭創建至少一個加載項,並以黑客方式成功註冊它。因爲,我無法正常註冊它,所以我通過用我自己的DLL替換DLL(包含.net代碼),將它註冊到現有加載項的名稱下。我建立了一個名爲ProgramId的項目,與我替換的項目相同,並且它完美地加載。我可以在Visual Studio中調試它。

System.Diagnostics.Debugger.Launch(); 

這可能對我來說安裝我的菜單命令,並得到我需要做的。

最初,我遵循儘可能多的指令,我可以在網上找到有關如何手動安裝Mindjet插件的內容,但此過程的內容受到嚴重限制。

接下來,我打開了MindManager並轉到AddIns菜單下的選項。我可以看到從註冊表中獲取的加載項的友好名稱,我從有限的指示信息中設置了正確的值。但是,我注意到在附加選項窗口的底部沒有顯示其他加載項確實顯示路徑的位置。我不知道如何創建這條路徑或它的位置。

這似乎很清楚,由於位置丟失,我的代碼肯定不會加載。

當然,可能還有一些我錯過的東西可能會使問題更加複雜化,但這看起來像是一個很好的起點。我從其他一些加載項(已預先安裝)查看受管.net程序集的代碼,但沒有發現任何位置信息的跡象。我還通過註冊表查找了沒有運氣的類似位置數據。

我已經沒有什麼東西可以嘗試,並花了兩天的好時間尋找答案,並且迄今爲止已經空手而歸。

回答

1

MindJet MindManager使用COM加載項體系結構。如果您需要註冊一個非託管本機COM加載項,則需要使用RegSrv32在註冊表中添加一條記錄,以便在MindManager嘗試加載其加載項時用於查找dll。

您也可以使用託管.NET項目創作加載項,並引用MindJet提供的包裝器庫。該庫也需要註冊,但RegSrv32不知道如何處理.NET託管庫。因此,您必須按照以下步驟使用正確構建的.NET Framework中的RegAsm。

  1. 拍外接程序具有強名稱密鑰
  2. 在AssemblyInfo.cs中設置COM可見爲true

    [組件:標記有ComVisible特性(真)]

  3. 註冊爲互操作RegAsm類型.exe a)使用.NET的正確版本。 (在我的情況 「C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ regasm.exe」) B)這允許應用程序找到的.dll

    [實施例的命令行的位置: ] C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ RegAsm。exe「C:\ Program Files文件(x86)\ Mindjet \ MindManager 10 \ Automated.Mindjet.dll」/ register/codebase

+0

其他gothcha的包括沒有編譯開關「允許不安全的代碼」設置爲true作爲「嵌入互操作類型」設置爲false。如果沒有這些選擇,你可能會遇到一些難以說出的問題。如果應用了正確的SetWindowsHookEx,您將可以訪問API未提供給您的一些事件。只需使用spy ++來找到正確的WH_MESSAGES – jwize