2013-03-25 39 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错误不是很具描述性,大多数情况下只是崩溃。顺便说一句,如果你只是删除整个上下文菜单?)