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()

ウォッチ ウィンドウに入れると、2 行目以降のウォッチにpaasystem.diagnostics.processが表示されますが、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 は、すべてのドキュメントを処理して、1 つのインスタンスのみが実行されるようにします。いわゆる単一インスタンス アプリ。

したがって、Word を同じように起動し、Word が既に実行されている場合、起動した 2 番目のコピーは、最初のインスタンスにドキュメントを開くように要求するだけです。そして、すぐに終了します。コード爆弾を作成します。これは、ユーザーが 2 番目のドキュメントを閉じたときに、すべてのドキュメントを閉じたときにのみ、ユーザーが何をしようとしているのかを知ることもできません。不完全な回避策の 1 つは、定期的に .doc ファイルを開こうとすることです。Word が開いている間はロックされます。

于 2011-03-09T18:42:28.150 に答える