Запустите и наблюдайте за процессом из VB.NET 2010 - PullRequest
1 голос
/ 09 марта 2011

Я работаю над приложением, которое должно запустить 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

1 Ответ

1 голос
/ 09 марта 2011

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

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

...