0

さまざまなアプリケーション(Excel、Wordなど)でファイルを開くvbnet / c#.NETベースのアプリケーションを開発しています。

アプリケーションはを使用して起動されますDim app As Process = Process.Start(ProcessProperties)

ここで、使用しているプロセスを終了する必要がある場合、ドキュメントを強制終了するapp.Kill()前に、ドキュメントが変更されているかどうかを確認する必要があります。

どうすればそれを処理できますか?そして、可能であれば、保存のためにアプリケーションのネイティブプロンプトを起動するにはどうすればよいですか?

ありがとう

4

3 に答える 3

4

オフィスアプリケーションの場合は、 Office相互運用機能アセンブリProcess.Startを使用して、それらを起動および制御するのではありません。これはExcelのサンプルコードです(VB.NET)。Microsoft.Office.Interop.Excel.dllこれを機能させるには、プロジェクト参照に追加する必要があります。

   oExcel = New Microsof.Office.Interop.Excel.Application
   oBook = oExcel.Workbooks.Open(filepath)
   'Do your stuff
   oBook.Close 'This will trigger the application native prompt if the document was modified
   oExcel.Quit()

他のプログラムの場合、それはプログラムに大きく依存します

于 2012-05-22T18:05:24.733 に答える
2

Process.CloseMainWindowではなく呼び出すことで、必要に近い動作を実現できますProcess.Kill

の動作はCloseMainWindow、ユーザーがシステム メニューを使用してアプリケーションのメイン ウィンドウを閉じる場合と同じです。したがって、メイン ウィンドウを閉じてプロセスを終了する要求によって、アプリケーションがすぐに終了することはありません。

を呼び出すと、プロセスによって編集されたデータまたはプロセスに割り当てられたリソースが失われる可能性がありますKillKillプロセスの異常終了を引き起こすため、必要な場合にのみ使用してください。CloseMainWindowプロセスを正常に終了し、すべてのウィンドウを閉じることができるため、インターフェイスを備えたアプリケーションに適しています。

変更が保存されていない Office アプリケーションの場合、CloseMainWindow[保存] ダイアログが表示されます。ユーザーが「キャンセル」を押すシナリオを処理する必要があります。これは、WaitForExit通話が無期限にブロックされる可能性があるためです。

例えば:

// Launch Word application.
Process wordProcess = 
    Process.Start(@"C:\Program Files (x86)\Microsoft Office\Office12\winword.exe");

// Give user some time to type in text.
Thread.Sleep(TimeSpan.FromSeconds(20));

// Request Word to close.
wordProcess.CloseMainWindow();

// Wait until user saves or discards changes.
// May block indefinitely if user cancels.
wordProcess.WaitForExit();
于 2012-05-22T18:09:29.640 に答える
0

この問題にはさまざまなアプローチがあります。ある種の初期チェックサムを計算し、チェックサムをやり直して元のチェックサムと比較することで、ドキュメントに変更があるかどうかを確認できます。

この部分はあなたの質問からはあまり明確ではありません。ドキュメントが保存された場合、おそらくファイルの date_modified 値を見て、変更があったかどうかを確認できます。

于 2012-05-22T18:09:11.130 に答える