Vb.net system.diagnostics.process在没有先打开Excel的情况下将不会打开Excel文件

Vb.net system.diagnostics.process在没有先打开Excel的情况下将不会打开Excel文件,vb.net,excel,Vb.net,Excel,我有一个VB.Net应用程序,其中我有一个通用方法,可以使用system.diagnostics.process打开本地驱动器上存在的文档 Public Shared Function OpenFileWithProcess(ByVal lsFileNameWithPath As String, Optional ByVal lPrintOption As PrintOutputOption = PrintOutputOption.Preview) Try Select

我有一个
VB.Net
应用程序,其中我有一个通用方法,可以使用
system.diagnostics.process
打开本地驱动器上存在的文档

Public Shared Function OpenFileWithProcess(ByVal lsFileNameWithPath As String, Optional ByVal lPrintOption As PrintOutputOption = PrintOutputOption.Preview)

    Try
        Select Case lPrintOption
            Case PrintOutputOption.Preview
                Dim P As System.Diagnostics.Process
                P = Process.Start(lsFileNameWithPath)
                If Not P Is Nothing Then
                    Dim handle As IntPtr = P.Handle
                    SetForegroundWindow(handle)
                End If

            Case PrintOutputOption.Print
                Dim Proc As New Process
                Proc.StartInfo.FileName = lsFileNameWithPath
                Proc.StartInfo.UseShellExecute = True
                Proc.StartInfo.Verb = "Print"
                Proc.Start()
       End Select
    Catch ex As Exception
        If oSQL.Key_Developer Then
            Stop
        End If
        Throw ex
    End Try
End Function
在某些装有Windows8和OFfice2010的计算机上,如果不先打开Excel,此方法将无法打开Excel文件。相反,它将出现“运行时错误2147467259(80004005)。向应用程序发送命令时出错”

如果Excel在方法调用之前已打开,则文件可以正常打开

一些其他环境信息:
-编译为.NET Framework 4的VB.NET应用程序 -应用程序部署在Windows 7、8和8.1上

我可以捕获错误并尝试使用错误后挂起的Excel会话再次启动该过程,但我想知道是否有人可以告诉我或帮助我了解这里发生了什么


谢谢您的时间。

无关备注:请使用
Throw
而不是
Throw ex
。后者将弄乱堆栈跟踪(通过指向
Throw ex
行),而前者将保持堆栈跟踪的完整性。