2013-03-25 34 views
0

我有一個相當大的Outlook插件具有以下ribbon.xml:絲帶的Invalidate讓我的Outlook插件崩潰

<?xml version="1.0" encoding="UTF-8"?> 
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load"> 
    <ribbon> 
    <tabs> 
     <tab idMso="TabMail"> 
    <group id="groupViewHome" label="View tasks"> 
     <toggleButton id="buttonToggleHistoryHome" getLabel="getLabelToggleHistory" imageMso="ControlToggleButton" onAction="toggleHistory_Click" size="large" getPressed="getEnabledToggleHistory" /> 
    </group> 
     </tab> 
     <tab idMso="TabAddIns" label="DCP"> 
    <group id="groupCreateTask" label="Create a task"> 
     <button id="buttonNewTask" label="New Task" imageMso="QueryAppend" onAction="buttonNewTask_Click" size="large" getEnabled="getMailSelected" /> 
    </group> 
    <group id="groupEdit" label="Edit a task"> 
     <button id="buttonAddSelection" label="Copy selection to task" imageMso="QueryUpdate" onAction="selectedText_Click" size="large" getEnabled="getMailAndIDSelected"/> 
    </group> 
    <group id="groupView" label="View tasks"> 
     <button id="buttonTaskHistory" imageMso="FileDocumentInspect" onAction="taskInfo_Click" getLabel="getButtonHistoryLabel" /> 
     <toggleButton id="buttonToggleHistory" getLabel="getLabelToggleHistory" imageMso="ControlToggleButton" onAction="toggleHistory_Click" getPressed="getEnabledToggleHistory" /> 
     <checkBox id="buttonTriggerMail" label="Toggle auto-history" onAction="Trigger_Click" getPressed="getInitialTriggerState"/> 
    </group> 
    <group id="groupAttach" label="Attachments"> 
     <button id="saveMail2" label="Add mail as .msg attachment" imageMso="AttachItem" onAction="saveMail_Click" getEnabled="getMailAndIDSelected"/> 
     <button id="selectAttach" label="Select attachments to add" imageMso="AttachMenu" onAction="selectAttach_Click" getEnabled="getMailAndIDSelectedAndAttach"/> 
    </group> 
    <group id="groupLinks" label="Hyperlinks"> 
     <button id="addLinkToMail" label="Add task link to mail body" imageMso="HyperlinkInsert" onAction="addLink_Click" size="large" getEnabled="getMailAndIDSelected"/> 
    </group> 
     </tab> 
    </tabs> 
    </ribbon> 
    <contextMenus> 
    <contextMenu idMso="ContextMenuReadOnlyMailText"> 
     <menu id="dcp" label="DCP"> 
    <button id="selectedText" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/> 
    <button id="addTask" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" /> 
     </menu> 
    </contextMenu> 
    <contextMenu idMso="ContextMenuReadOnlyMailTable"> 
     <menu id="dcp3" label="DCP"> 
    <button id="selectedText2" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/> 
    <button id="addTask3" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" /> 
     </menu> 
    </contextMenu> 
    <contextMenu idMso="ContextMenuReadOnlyMailTableCell"> 
     <menu id="dcp4" label="DCP"> 
    <button id="selectedText3" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/> 
    <button id="addTask4" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" /> 
     </menu> 
    </contextMenu> 
    <contextMenu idMso="ContextMenuReadOnlyMailListTable"> 
     <menu id="dcp5" label="DCP"> 
    <button id="selectedText4" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/> 
    <button id="addTask5" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" /> 
     </menu> 
    </contextMenu> 
    <contextMenu idMso="ContextMenuReadOnlyMailPictureTable"> 
     <menu id="dcp6" label="DCP"> 
    <button id="selectedText5" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click" /> 
    <button id="addTask6" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" /> 
     </menu> 
    </contextMenu> 
    <contextMenu idMso="ContextMenuReadOnlyMailTextTable"> 
     <menu id="dcp7" label="DCP"> 
    <button id="selectedText6" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/> 
    <button id="addTask7" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" /> 
     </menu> 
    </contextMenu> 
    <contextMenu idMso="ContextMenuReadOnlyMailTableWhole"> 
     <menu id="dcp8" label="DCP"> 
    <button id="selectedText7" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click" /> 
    <button id="addTask8" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" /> 
     </menu> 
    </contextMenu> 
    <contextMenu idMso="ContextMenuReadOnlyMailList"> 
     <menu id="dcp9" label="DCP"> 
    <button id="selectedText8" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click" /> 
    <button id="addTask9" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" /> 
     </menu> 
    </contextMenu> 
    <contextMenu idMso="ContextMenuReadOnlyMailHyperlink"> 
     <menu id="dcp10" label="DCP"> 
    <button id="selectedText9" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click" /> 
    <button id="addTask10" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" /> 
     </menu> 
    </contextMenu> 
    <contextMenu idMso="ContextMenuMailItem"> 
     <menu id="dcp2" label="DCP"> 
    <button id="buttonTaskHistoryMail" label="View task history" imageMso="SourceControlShowHistory" onAction="taskInfo_Click" /> 
    <button id="addTask2" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" /> 
    <button id="saveMail" label="Add mail as .msg attachment" imageMso="AttachItem" onAction="saveMail_Click" /> 
     </menu> 
    </contextMenu> 
    <contextMenu idMso="ContextMenuAttachments"> 
    <button id="buttonAddAttachment" label="Add attachment to task" imageMso="AttachMenu" onAction="addAttachment_Click"/> 
    </contextMenu> 
    </contextMenus> 
</customUI> 

正如你可以看到我有一對夫婦的要求無效,使行動,切換..我的按鈕。我的加載項啓動正常,但有時會崩潰。下面是一些例子在其上加載幾乎總是崩潰:

  • 打開一個新的Inspector窗口郵件項目,然後再將它關閉
  • 多個窗口打開,上下文菜單的自定義按鈕,在打開

它發生的場合讓我非常肯定它與創建新的上下文菜單或功能區時的自動失效有關,而不是當我自己調用它時。當我刪除getEnabled,getPressed ...屬性時,該錯誤不會持續。我無法想出一個辦法來壓制錯誤,而不是崩潰或如何解決它。所以,如果任何人都可以幫助,或者可以給我更多的信息,這將是非常感激。如果你需要更多的代碼(比如getEnabled,getPressed ...方法),請告訴我。

我的無效方法。請注意,大多數只是返回一個布爾值。這些布爾值保持爲ribbon.cs類

public bool getEnabledToggleHistory(IRibbonControl control) 
{ 
    return toggleHistoryPanelState; 
} 

public bool getMailSelected(IRibbonControl control) 
{ 
    try 
    { 
     MailItem mailItem = getMail(); 
     if (mailItem != null) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
    catch (System.Exception ex) 
    { 
     return false; 
    } 
} 

public bool getMailAndIDSelected(IRibbonControl control) 
{ 
    return mailAndIDSelected; 
} 

public bool getMailAndIDSelectedAndAttach(IRibbonControl control) 
{ 
    if (hasAttachments && mailAndIDSelected) 
    { 
     return true; 
    } 
    return false; 
} 

如果我在一個新的Visual Studio實例調試,我得到以下內部私有變量:

Unhandled exception at 0x70B5B2A7 (MSO.DLL) in OUTLOOK.EXE: 0xC0000005: Access violation reading location 0x00000000.

如果我從調試的代碼我的解決方案,我永遠不會發現錯誤,也沒有說它有一個未處理的錯誤。它只是崩潰。

+0

把你的背後C# - 如何告訴任何東西:) – NSGaga 2013-03-25 12:42:12

+0

我的方法需要無效非常簡單,最有可能不是問題。不過,我會張貼一些,如果你想 – 2013-03-25 12:43:06

+0

我編輯我的問題,告訴你使方法失效 – 2013-03-25 12:48:09

回答

0

(發佈排序根據我們的討論中註釋的「答案」的)

如果你不能抓住它或日誌(不只是捕捉異常,東西放在轉儲 - 你可以轉儲到臨時用戶文件夾)...

我最好的建議,the good old divide and conquer - 刪除一切(你已經說只有'旗幟'造成它),只留下一個按鈕,其中的一件事 - '返回'所有方法直到你得到一個導致所有問題的東西 - 類似的東西。 (OL的XML系統是很容易出錯的 - 所以你需要檢查一切(一絲不苟) - 而且OL錯誤不是很具描述性,大多數情況下只是崩潰。順便說一句,如果你只是刪除整個上下文菜單?)