1

我正在开发一个需要启动 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进入手表窗口,它system.diagnostics.process在第 2 行之后的手表中显示 aa,但在第 4 行之后它返回到 NOTHING。进程启动,但我无法再使用第 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
4

1 回答 1

1

Microsoft Word 是一个大程序。运行它的几个副本会很快让普通消费者级别的机器崩溃。为避免这种情况,Word 确保只运行一个实例,处理所有文档。所谓的单实例应用程序。

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

于 2011-03-09T18:42:28.150 回答