80分:System.Diagnostics.Process.Start加载文件时,Excel失去响应

泡泡龙 2013-06-11 11:24:19
我在Excel里面做了了Ribbon按钮,点击按钮加载文件
使用如下代码:
System.Diagnostics.Process.Start(文件路径)

现在的问题是,如果文件不是与Excel关联的,例如rar之类的,可以正常打开

如果是Excel关联的扩展名,例如xls,Excel就会失去响应几分钟,文件也没用打开,然后这条语句就像没有执行,就运行后面的语句了。

用ShellExecute也是一样结果。检查返回值是42(没报错误?)



谁知道是什么原因?如何解决?

Process.Start不能执行宿主程序关联的文件吗?貌似运行的时候没有加载成功
...全文
139 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡龙 2013-06-13
  • 打赏
  • 举报
回复
加上FindExecutable的判断了,凑合解决
泡泡龙 2013-06-13
  • 打赏
  • 举报
回复
测试发现,如果在Excel中选中"忽略使用动态数据交换(DDE)的其他应用程序", ShellExecute报SE_ERR_DDEFAIL 动态数据交换执行失败.(29) 如果不选中"忽略使用动态数据交换(DDE)的其他应用程序", ShellExecute返回值是42(要等几分钟才返回值,期间Excel ribbon菜单会停止响应),文件并没有被当前的Excel所打开。 如果启动一个新的进程,是可以打开的。 估计还是DDE方面的什么问题
  • 打赏
  • 举报
回复
你的Add-In之类的.net代码崩溃了。在vsto的office工程中先调试好代码。 调试!而不是随便超个 Add-In 代码就注册和部署。不要那么大胆。
泡泡龙 2013-06-11
  • 打赏
  • 举报
回复
我的目的就是实现类似windows鼠标双击打开文件的效果
泡泡龙 2013-06-11
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
你的Add-In之类的.net代码崩溃了。在vsto的office工程中先调试好代码。 调试!而不是随便超个 Add-In 代码就注册和部署。不要那么大胆。
代码是这样的(不崩溃): if (extensionName.StartsWith(".xl") || extensionName.StartsWith(".csv")) { ExcelAddInUI.xlApp.Workbooks.Open(control.Tag); } else { System.Diagnostics.Process.Start(control.Tag); //IntPtr a=Win32API.ShellExecute(IntPtr.Zero, "open", control.Tag, null, null, (int)ShowWindowStyles.SW_RESTORE); } 如果不做xl和csv判断,都让System.Diagnostics.Process.Start执行,就会出现一楼说的现象。 没法理解?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧