从VB.NET 2010启动并观看流程

时间:2011-03-09 17:38:05

标签: vb.net visual-studio-2010 frameworks vb.net-2010

我正在处理需要启动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

1 个答案:

答案 0 :(得分:1)

Microsoft Word是一项大计划。运行它的几个副本将很快使平均消费者级别的机器龙骨过度。为了避免这种情况,Word确保只运行一个实例,处理所有文档。一个所谓的单实例应用程序。

因此,如果你像你一样启动Word并且Word已经运行,那么你开始的第二个副本只会要求第一个实例打开文档。并立即退出。让你的代码炸弹。这也会阻止你做你想做的事情,当用户关闭所有文件时,你无法判断用户何时关闭第二个文件。一个不完美的解决方法是尝试定期打开.doc文件。只要Word打开它就会被锁定。