DOBON.NETプログラミング道掲示板
(現在 過去ログ4 を表示中)

[ 親記事をトピックトップへ ]

このトピックに書きこむ

過去ログには書き込み不可

■34346 / inTopicNo.1)  Re[1]: Process.WaitForExitで正常に動作しない?
  
□投稿者/ 香魚 一般人(2回)-(2019/10/31(Thu) 21:19:59)
  • アイコンありがとうございました。

    windowsのバージョンが原因か
    excelのバージョンが原因か
    visualstudioのバージョンが原因か
    分からなかったのですが、
    excelのバージョンが原因であることが分かりました。

    excelでいろいろ調べたところ、
    /x スイッチを指定すれば、プロセス統合(?)されないようですので、
    それで対応してみたいと思います。

解決み!
引用返信 削除キー/
■34344 / inTopicNo.2)  Re[1]: Process.WaitForExitで正常に動作しない?
□投稿者/ 魔界の仮面弁士 大御所(1244回)-(2019/10/29(Tue) 08:58:02)
  • アイコンNo34341に返信(香魚さんの記事)
    > Win7 + Office2010 + VB2010 の環境で同じプログラムを実行すると
    > excel.exeもnotepad.exeも
    > Cのケースでも問題なく待機状態となります。

    Excel 2010 までは、新規プロセスを起動していましたが、
    Excel 2013 からは既存プロセスを流用する設計に変わったためです。

    ただしオートメーションで起動する場合には、引き続き
    複数のプロセスとして同時に起動することができます。


    詳しいことはこちらをご覧ください。
    https://blogs.msdn.microsoft.com/office_client_development_support_blog/2012/02/14/office-4/
    https://blogs.msdn.microsoft.com/office_client_development_support_blog/2016/12/19/excel2013-changes-to-sdi/
引用返信 削除キー/
■34342 / inTopicNo.3)  Re[1]: Process.WaitForExitで正常に動作しない?
□投稿者/ Azulean 大御所(512回)-(2019/10/28(Mon) 22:04:58)
  • アイコン2019/10/28(Mon) 22:05:31 編集(投稿者)

    No34341に返信(香魚さんの記事)
    > Cのケースでも、2つ目に起動したエクセルが終了するまで
    > WaitForExitで待機状態にすることはできないでしょうか?

    残念ながらできません。

    Excel.exe は、すでに Excel.exe が起動していればそのプロセスに処理をお願いしてすぐに終了するように実装されているためです。

    ほかの方法で Excel.exe がいなくなっているかどうかを監視するということも考えられますが、ユーザーが最初から Excel.exe を起動していた場合にどうするかといった仕様検討が必要になります。
引用返信 削除キー/
■34341 / inTopicNo.4)  Process.WaitForExitで正常に動作しない?
□投稿者/ 香魚 一般人(1回)-(2019/10/28(Mon) 20:36:15)
  • アイコン環境/言語:[Win10,Office2016,VB.NET(2017)] 
    分類:[.NET] 

    Public Class Form1
        Dim myapp As String = "excel.exe"
        'Dim myapp As String = "notepad.exe"
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim p As New System.Diagnostics.Process()
            p.StartInfo.FileName = myapp
            p.Start()
        End Sub
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim p As New System.Diagnostics.Process()
            p.StartInfo.FileName = myapp
            p.Start()
            p.WaitForExit()
            MsgBox("完了")
        End Sub
    End Class
    
    Button1はexcel.exeまたはnotepad.exeを起動します。
    
    Button2はexcel.exeまたはnotepad.exeを起動して
    そのプロセスが終了したら完了のメッセージボックスを表示します。
    
    実行環境 : Win10 + Office2016 + VB2017
    
    
    上記のプログラムを実行すると次のような動きになります。
    A)Button1を押すと、excel.exeが起動します。
      →問題なし。
    Aで起動したエクセルを終了します。
    
    B)Button2を押すと、excel.exeが起動し、WaitForExitで待機状態となります。
      エクセルを終了すると完了のメッセージボックスが表示されます。
      →問題なし。
    
    C)Button1を押して、excel.exeを起動します。
      エクセルが起動している状態で、Button2を押します。
      エクセルが2つ表示された状態になりますが、
      その状態で完了のメッセージが表示されてしまいます。
      →なぜかWaitForExitが働いていない状態。
    
    Cのケースでも、2つ目に起動したエクセルが終了するまで
    WaitForExitで待機状態にすることはできないでしょうか?
    
    ちないみに、コメントアウトしているnotepad.exeの方で試すと、
    Cのケースも問題なく待機状態となります。
    
    ちなみに、
    Win7 + Office2010 + VB2010 の環境で同じプログラムを実行すると
    excel.exeもnotepad.exeも
    Cのケースでも問題なく待機状態となります。
    

引用返信 削除キー/



トピック内ページ移動 / << 0 >>
Mode/  Pass/


- Child Tree -