2011-03-09 47 views
1

我正在研究需要啓動Microsoft Word的應用程序,然後在用戶關閉Word時繼續。下面的代碼應該可以工作,但它不會。我得到一個「對象不設置到對象的實例」從VB.NET 2010啓動並觀看過程

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。這個過程啓動了,但我不能再用線監視它了。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

[This Link](http://social.msdn.microsoft.com/Forums/en-US/vbinterop/thread/9629b7b1-b2fd-4575-8dd1-589681c1262c/)有幾個可以使用的示例函數。它出現;一目瞭然,該線程上的Op能夠捕獲OnDocumentClosed事件。我建議在你發佈的循環中使用事件。 – Smudge202 2011-04-19 14:46:24

回答

1

Microsoft Word是一個大計劃。運行它的幾個副本很快就會讓普通消費者級別的機器快速結束。爲了避免這種情況,Word確保只運行一個實例,負責處理所有文檔。一個所謂的單實例應用程序。

因此,如果您像啓動Word一樣啓動Word並且Word已在運行,那麼您啓動的第二個副本只會要求第一個實例打開文檔。並立即退出。製作你的代碼炸彈。這也阻止了你做你正在做的事情,只有當她關閉所有文檔時,你才能知道用戶什麼時候關閉第二個文檔。一個不完美的解決方法是嘗試定期打開.doc文件。只要Word打開它就會被鎖定。