我在Excel里面做了了Ribbon按钮,点击按钮加载文件
使用如下代码:
System.Diagnostics.Process.Start(文件路径)现在的问题是,如果文件不是与Excel关联的,例如rar之类的,可以正常打开如果是Excel关联的扩展名,例如xls,Excel就会失去响应几分钟,文件也没用打开,然后这条语句就像没有执行,就运行后面的语句了。用ShellExecute也是一样结果。检查返回值是42(没报错误?)谁知道是什么原因?如何解决?Process.Start不能执行宿主程序关联的文件吗?貌似运行的时候没有加载成功Process StartShellExecute失去响应

解决方案 »

  1.   

    我的目的就是实现类似windows鼠标双击打开文件的效果
      

  2.   

    你的Add-In之类的.net代码崩溃了。在vsto的office工程中先调试好代码。调试!而不是随便超个 Add-In 代码就注册和部署。不要那么大胆。
      

  3.   


    代码是这样的(不崩溃):
    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执行,就会出现一楼说的现象。没法理解?
      

  4.   

    测试发现,如果在Excel中选中"忽略使用动态数据交换(DDE)的其他应用程序",
    ShellExecute报SE_ERR_DDEFAIL 动态数据交换执行失败.(29)如果不选中"忽略使用动态数据交换(DDE)的其他应用程序",
    ShellExecute返回值是42(要等几分钟才返回值,期间Excel ribbon菜单会停止响应),文件并没有被当前的Excel所打开。如果启动一个新的进程,是可以打开的。估计还是DDE方面的什么问题
      

  5.   

    加上FindExecutable的判断了,凑合解决