Запустите и посмотрите процесс из 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 в окно просмотра, и он показывает system.diagnostics.process в часах после строки 2, но после строки 4 он возвращается к НИЧЕГО. Процесс запускается, но я больше не могу отслеживать его со строками 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

person Tom Vande Stouwe    schedule 09.03.2011    source источник
comment
Эта ссылка содержит несколько примеров функций, которые вы можете использовать. Кажется; с первого взгляда видно, что Op в этом потоке смог перехватить события OnDocumentClosed. Я бы рекомендовал использовать событие в цикле, который вы опубликовали.   -  person Smudge202    schedule 19.04.2011


Ответы (1)


Microsoft Word — это большая программа. Если запустить несколько копий, машина среднего потребительского уровня быстро выйдет из строя. Чтобы избежать этого, Word гарантирует, что всегда запускается только один экземпляр, заботясь обо всех документах. Так называемое одноэкземплярное приложение.

Поэтому, если вы запускаете Word, как вы это делаете, и Word уже запущен, то вторая копия, которую вы запускаете, запрашивает только 1-й экземпляр, чтобы открыть документ. И сразу выходит. Делаем кодовую бомбу. Это также мешает вам делать то, что вы пытаетесь сделать, вы не можете сказать, когда пользователь закрывает второй документ, только когда она закрывает все документы. Одним из несовершенных обходных путей может быть периодическое открытие файла .doc. Он заблокирован, пока Word открыт.

person Hans Passant    schedule 09.03.2011