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

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

C# と VB.NET の入門サイト

MessageBox表示処理に例外が発生する

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■82412 / inTopicNo.1)  MessageBox表示処理に例外が発生する
  
□投稿者/ ごう (16回)-(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());


引用返信 編集キー/
■82413 / inTopicNo.2)  Re[1]: MessageBox表示処理に例外が発生する
□投稿者/ Jitta (255回)-(2017/01/10(Tue) 09:53:54)
No82412 (ごう さん) に返信

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

タスクスケジューラで実行された時に、
表示すべきルートウィンドウがないから、です。
引用返信 編集キー/
■82415 / inTopicNo.3)  Re[1]: MessageBox表示処理に例外が発生する
□投稿者/ WebSurfer (1115回)-(2017/01/10(Tue) 10:00:12)
No82412 (ごう さん) に返信

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

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

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

質問者さんの場合はコンソールアプリとのことですが、Windows Server 2012 R2 とのことですから、
サーバーのサービスとして動いているのではないのですか?
引用返信 編集キー/
■82416 / inTopicNo.4)  Re[1]: MessageBox表示処理に例外が発生する
□投稿者/ WebSurfer (1116回)-(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." とのことです。
引用返信 編集キー/
■82417 / inTopicNo.5)  Re[2]: MessageBox表示処理に例外が発生する
□投稿者/ ???? (1回)-(2017/01/10(Tue) 10:50:47)
WebSurfer さん

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


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

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



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


引用返信 編集キー/
■82418 / inTopicNo.6)  Re[2]: MessageBox表示処理に例外が発生する
□投稿者/ ごう (17回)-(2017/01/10(Tue) 10:53:48)
Jitta さん

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

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

ルートウィンドウについて全く考慮していませんでしたので
これから調べてみます。
引用返信 編集キー/
■82419 / inTopicNo.7)  Re[3]: MessageBox表示処理に例外が発生する
□投稿者/ WebSurfer (1117回)-(2017/01/10(Tue) 11:07:07)
No82417 (???? さん) に返信

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

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

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

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

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

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

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

ということがあてはまります。
引用返信 編集キー/
■82420 / inTopicNo.8)  Re[2]: MessageBox表示処理に例外が発生する
□投稿者/ ごう (18回)-(2017/01/10(Tue) 12:03:45)
WebSurfer さん

No82417は私です。


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

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


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


引用返信 編集キー/
■82421 / inTopicNo.9)  Re[3]: MessageBox表示処理に例外が発生する
□投稿者/ WebSurfer (1118回)-(2017/01/10(Tue) 12:25:24)
No82420 (ごう さん) に返信

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

[C#]アプリケーションが UserInteractive モードで実行されていないときに、
モーダル ダイアログまたはフォームを表示することは有効な操作ではありません。
https://karlsnautr.blogspot.jp/2013/01/c-userinteractive.html
引用返信 編集キー/
■82423 / inTopicNo.10)  Re[3]: MessageBox表示処理に例外が発生する
□投稿者/ WebSurfer (1119回)-(2017/01/10(Tue) 13:09:28)
No82420 (ごう さん) に返信

【追伸】

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

Environment.UserInteractive が true か false かと、サービスアカウントで実行されて
いるか否かは別の話のようです(詳しく調べ切れていませんが)。
引用返信 編集キー/
■82425 / inTopicNo.11)  Re[4]: MessageBox表示処理に例外が発生する
□投稿者/ Jitta (256回)-(2017/01/10(Tue) 13:51:50)
この辺
http://www.atmarkit.co.jp/ait/spv/1307/08/news101.html

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

ルートウィンドウ と言うのは、私がウィンドウ システムの最初が SunView だったからで、
Windows でなんて言うか知らない。
「デスクトップとの対話」「Interactive」あたりがキーワード。
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ