如何调试挂起的SaveFileDialog

时间:2016-08-31 19:12:08

标签: c# excel vsto freeze savefiledialog

我的VSTO加载项报告的几个用户在"另存为"应显示对话框。使用Excel加载项和Word加载项会发生这种情况。有趣的是,这两个应用程序在调用"另存为"对文件的命令。

我很难解决这个问题,因为整个应用程序只是在

之后冻结
// using System.Windows.Forms;
SaveFileDialog dlg = new SaveFileDialog();
// lines to configure dlg left out
dlg.ShowDialog();

在这种情况下尝试关闭Excel或Word时,无法关闭消息框" Excel / Word"出现了,人们不得不求助于任务经理摆脱它。

Excel和Word经常挂起的事实"另存为"特别令人不安,因为我不知道我的插件如何干扰内置"另存为"这些应用程序的命令。

更糟糕的是,加载项甚至无需加载。通过取消选中" COM加载项中的相应条目来取消激活它们。并重新启动应用程序并不能解决问题。我必须完全删除加载项以确保"另存为"不冻结申请。

这让我觉得我的加载项中的代码不是问题所在,而是存在一个(非活动的)VSTO加载项,它会阻止文件对话框出现,从而导致挂起。

挂起并不总是发生,而不是在所有机器上发生。它非常随机。

我将如何进一步调查此事?我有Visual Studio Professional 2013,但不知道如何找出Office应用程序冻结的原因和位置。

1 个答案:

答案 0 :(得分:2)

Excel冻结打开/保存就像使用“预热”注册表值注册托管加载项一样,即使加载项未加载也是如此。

“加号”注册表项中的“Warmup”注册表值一旦被认为会导致Excel在启动时加载VSTO运行时,而不是在第一次用户与加载项交互时。显然,it was never implemented已从Microsoft的在线documentation of the registry entries for VSTO add-ins中删除。

一旦我从加载项的注册表项中删除了“Warmup”值,Excel的“打开/另存为”对话框就不再冻结,加载项自己的SaveFileDialog.ShowDialog()调用也没有。我不知道为什么会这样,但很明显,“热身”值会做某事

我能够通过一个无法执行任何操作的虚拟加载项来重现这一点。如果在没有“预热”HKCU\Software\Microsoft\Excel\Addins的{​​{1}}中注册了这个虚拟加载项,Excel就可以正常工作。只要我添加值为DWORD的{​​{1}},当我点击“打开”或“另存为”时Excel就会冻结 - 再次,虚拟加载项根本不会执行任何操作。

因此,如果人们想知道为什么他们的Office应用程序在安装VSTO加载项后冻结,我建议从注册表中删除“Warmup”值,而不是花费数小时调试他们的代码(就像我之前做的那样)我发现了“热身”)。

我的用户反馈是积极的。