我正在处理需要启动Microsoft Word的应用程序,然后在用户关闭Word时恢复。下面的代码应该可以工作,但事实并非如此。我得到一个'对象未设置为对象的实例'
1 Dim pInfo As New ProcessStartInfo
2 Dim P As New Process
3 pInfo.FileName = "C:\test\LLR.doc"
4 P = Process.Start(pInfo)
5 ''# Here is where it goes bad
6 P.WaitForInputIdle()
7 P.WaitForExit()
我将p
放入观察窗口,它在第2行后的监视中显示system.diagnostics.process
,但在第4行之后返回到NOTHING。这个过程启动了,但我不能用6号线和6号线监视它。 7.这是Visual Studio 2010的“限制”还是我犯了操作员错误? MS帮助不显示2010版本中的可用进程(在Visual Studio 2005和Visual Studio 2008中)。
- 根据反馈进行编辑 - 最终解决方案
Private Function StartWord(ByVal NewFileName As String) As Boolean
MessageBox.Show("When you have finished editing the report, save and close word to complete operation")
Dim wapp As Application
wapp = New Microsoft.Office.Interop.Word.Application
wapp.Documents.Open(NewFileName)
wapp.Visible = True
wapp.WindowState = WdWindowState.wdWindowStateMaximize
wapp.Caption = "Large Loss Report"
Try
While wapp.Documents.Count > 0
System.Windows.Forms.Application.DoEvents()
End While
wapp.Quit()
Catch ex As Exception
End Try
Return True
End Function
答案 0 :(得分:1)
Microsoft Word是一项大计划。运行它的几个副本将很快使平均消费者级别的机器龙骨过度。为了避免这种情况,Word确保只运行一个实例,处理所有文档。一个所谓的单实例应用程序。
因此,如果你像你一样启动Word并且Word已经运行,那么你开始的第二个副本只会要求第一个实例打开文档。并立即退出。让你的代码炸弹。这也会阻止你做你想做的事情,当用户关闭所有文件时,你无法判断用户何时关闭第二个文件。一个不完美的解决方法是尝试定期打开.doc文件。只要Word打开它就会被锁定。