C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.82412 の関連記事表示

<< 0 >>
■82412  MessageBox表示処理に例外が発生する
□投稿者/ ごう -(2017/01/10(Tue) 09:13:09)

    分類:[.NET 全般] 

    アプリケーション実行OS:Windows Server 2012 R2
    アプリケーション開発環境:VS 2013


    サーバのタスク機能を使ってあらかじめ実行日・時間を設定して動作させるコンソールアプリケーションがあります。
    指定した実行日のログを確認すると、以下のエラーが記録されていました。(XXXXXは実行ファイル・関数名称)

    アプリケーション:XXXXX.exe
    フレームワークのバージョン:v4.0.30319
    説明: ハンドルされない例外のため、プロセスが中止されました。
    例外情報:System.InvalidOperationException
    場所 System.Windows.Forms.MessageBox.ShowCore(System.Windows.Forms.IWin32Window, System.String, System.String, System.Windows.Forms.MessageBoxButtons, System.Windows.Forms.MessageBoxIcon, System.Windows.Forms.MessageBoxDefaultButton, System.Windows.Forms.MessageBoxOptions, Boolean)
    場所 XXXXX.XXXXXAccessor.Connect(System.String)
    場所 XXXXX.Program.Check()
    場所 XXXXX.Program.Main()

    当方でソースコードを確認しましたところ、エラー発生時にMessageBox.Showを使用している個所がありました。
    System.Windows.Forms.MessageBox.ShowCoreで例外を出してしまった原因は、
    「コンソールアプリケーションであるにもかかわらず MessageBox.Showを使用していたから」と考えていますが
    認識はあっていますでしょうか?
    (System.Windows.Formsは宣言されています)

    なお、このアプリケーションはもともとフォームアプリとして作られていたようで
    Program.csのMain関数の中に以下の記述がありました。

    //フォームを表示しない
    //Application.Run(new Form1());

親記事 /過去ログ140より / 関連記事表示
削除チェック/

■82415  Re[1]: MessageBox表示処理に例外が発生する
□投稿者/ WebSurfer -(2017/01/10(Tue) 10:00:12)
    No82412 (ごう さん) に返信

    エラーメッセージは以下のようになっていませんか?

    "System.InvalidOperationException: アプリケーションが UserInteractive モードで実行されて
    いないときに、モーダル ダイアログまたはフォームを表示することは有効な操作ではありません。
    サービス アプリケーションからの通知を表示するには、ServiceNotification または
    DefaultDesktopOnly スタイルを指定してください。"

    IIS 上で動いている ASP.NET Web アプリ(NETWORK SERVICE 組み込みサービスアカウントで動く)
    で MessageBox を使うと上のメッセージが出ます。

    質問者さんの場合はコンソールアプリとのことですが、Windows Server 2012 R2 とのことですから、
    サーバーのサービスとして動いているのではないのですか?
記事No.82412 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82417  Re[2]: MessageBox表示処理に例外が発生する
□投稿者/ ???? -(2017/01/10(Tue) 10:50:47)
    WebSurfer さん

    ご回答ありがとうございます。


    >エラーメッセージは以下のようになっていませんか?

    >"System.InvalidOperationException: アプリケーションが UserInteractive モードで実行されて
    >いないときに、モーダル ダイアログまたはフォームを表示することは有効な操作ではありません。
    >サービス アプリケーションからの通知を表示するには、ServiceNotification または
    >DefaultDesktopOnly スタイルを指定してください。"



    ASP .NET Webアプリではなく、C#で作成したexeファイル形式のアプリで
    サーバのタスクとして設定しております。
    上記のエラーメッセージはサーバのイベントログ(アプリケーションログ)にありませんでした。

記事No.82412 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82419  Re[3]: MessageBox表示処理に例外が発生する
□投稿者/ WebSurfer -(2017/01/10(Tue) 11:07:07)
    No82417 (???? さん) に返信

    「???? さん」=「ごうさん」ですよね?

    話が噛み合っていないような感じです。

    > ASP .NET Webアプリではなく、C#で作成したexeファイル形式のアプリで
    > サーバのタスクとして設定しております。

    「ASP .NET Webアプリではなく」というのは承知しています。

    質問者さんの作成した「C#で作成したexeファイル形式のアプリ」はASP .NET Webアプリと
    同様にサービスとして動いているのではないですか・・・ということです。「サーバのタス
    ク」というのはサービスでは?

    質問者さんのアプリがサービスとして動いていると、先の私のレスのエラーメッセージ、

    > アプリケーションが UserInteractive モードで実行されていないときに、モーダル ダイ
    > アログまたはフォームを表示することは有効な操作ではありません。

    ということがあてはまります。
記事No.82412 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82413  Re[1]: MessageBox表示処理に例外が発生する
□投稿者/ Jitta -(2017/01/10(Tue) 09:53:54)
    No82412 (ごう さん) に返信

    コンソールアプリだから、ではありません。
    そのアプリをコマンドツールから実行すれば、
    ウィンドウは表示されるでしょう。

    タスクスケジューラで実行された時に、
    表示すべきルートウィンドウがないから、です。
記事No.82412 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82418  Re[2]: MessageBox表示処理に例外が発生する
□投稿者/ ごう -(2017/01/10(Tue) 10:53:48)
    Jitta さん

    ご回答ありがとうございます。

    > タスクスケジューラで実行された時に、
    > 表示すべきルートウィンドウがないから、です。

    ルートウィンドウについて全く考慮していませんでしたので
    これから調べてみます。
記事No.82412 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82416  Re[1]: MessageBox表示処理に例外が発生する
□投稿者/ WebSurfer -(2017/01/10(Tue) 10:22:13)
    No82412 (ごう さん) に返信

    【追伸】

    あと、Vista / Wondows Server 2008 以降で導入された Session 0 分離にも要注意かと思います。

    Impact of Session 0 Isolation on Services and Drivers in Windows
    https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn653293(v=vs.85).aspx

    詳しくは上記の記事からダウンロードできる Word ドキュメントを読んでいただきたいのですが、
    簡単に言うとサービスは全て Session 0 で実行され、"Because Session 0 is no longer a user
    session, services that are running in Session 0 do not have access to the video driver.
    This means that any attempt that a service makes to render graphics fails." とのことです。
記事No.82412 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82420  Re[2]: MessageBox表示処理に例外が発生する
□投稿者/ ごう -(2017/01/10(Tue) 12:03:45)
    WebSurfer さん

    No82417は私です。


    >質問者さんの作成した「C#で作成したexeファイル形式のアプリ」はASP .NET Webアプリと
    >同様にサービスとして動いているのではないですか・・・ということです。「サーバのタス
    >ク」というのはサービスでは?

    →質問の意図が把握できず、すみませんが、「タスクをサービスとして設定していませんか?」という意味でしょうか??


    以下のような手順で、サーバにタスクを設定していますので、サービスとして設定してはいないと思っております。
    http://i-think-it.net/windows2012r2-taskschd/

記事No.82412 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82421  Re[3]: MessageBox表示処理に例外が発生する
□投稿者/ WebSurfer -(2017/01/10(Tue) 12:25:24)
    No82420 (ごう さん) に返信

    タスクスケジューラーには全く詳しくないのでググって調べただけですが:

    [C#]アプリケーションが UserInteractive モードで実行されていないときに、
    モーダル ダイアログまたはフォームを表示することは有効な操作ではありません。
    https://karlsnautr.blogspot.jp/2013/01/c-userinteractive.html
記事No.82412 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82423  Re[3]: MessageBox表示処理に例外が発生する
□投稿者/ WebSurfer -(2017/01/10(Tue) 13:09:28)
    No82420 (ごう さん) に返信

    【追伸】

    もう少しググって調べて見ましたが、Task Schdeler については、要するに「プロセスが
    ユーザー対話モードで実行されているかどうか」(Environment.UserInteractive が true
    か false か)ということが問題のようですね。

    Environment.UserInteractive が true か false かと、サービスアカウントで実行されて
    いるか否かは別の話のようです(詳しく調べ切れていませんが)。
記事No.82412 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82425  Re[4]: MessageBox表示処理に例外が発生する
□投稿者/ Jitta -(2017/01/10(Tue) 13:51:50)
    この辺
    http://www.atmarkit.co.jp/ait/spv/1307/08/news101.html

    あと、Bingで「タスクスケジューラ フォーム」を検索すると
    「Windows 読者限定 タスクスケジューラで組んだスケジュール…」
    っていう日経ITproのページがあって、そこに書いてある。
    ただし、登録が必要。

    ルートウィンドウ と言うのは、私がウィンドウ システムの最初が SunView だったからで、
    Windows でなんて言うか知らない。
    「デスクトップとの対話」「Interactive」あたりがキーワード。
記事No.82412 のレス /過去ログ140より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -