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
行),而前者将保持堆栈跟踪的完整性。