- PR -

例外ダイアログを表示しない方法

投稿者投稿内容
得正カレー
会議室デビュー日: 2004/06/08
投稿数: 15
投稿日時: 2004-06-08 12:01
初歩的な質問かもしれないのですが、例外が発生した後に表示される
ダイアログを表示させない方法をご存知のかたがおられたら教えて
頂けないでしょうか?

やりたいこととしましては、共有フォルダにアクセスして、「デバイスが
準備できていません」みたいな標準エラー出力を取り込みたいのですが、
ダイアログが出てきてほしくないのです。。

環境はVB.NET2002, Windows2000です。
よろしくお願いします〜。

Sub Main()
Dim strMsg1, strUnc As String

'UNCパスを取得する
strMsg1 = "ファイル名を入力:"
Console.WriteLine(strMsg1)
strUnc = Console.ReadLine()

Dim myProcess As New Process()
Dim myProcessStartInfo As New ProcessStartInfo(strUnc)

myProcessStartInfo.UseShellExecute = False
myProcessStartInfo.RedirectStandardError = True
myProcessStartInfo.CreateNoWindow = True
myProcess.StartInfo = myProcessStartInfo
Try
myProcess.Start()
Catch
Dim myStreamReader As StreamReader = myProcess.StandardError
'標準エラーをコンソールに出力
Console.WriteLine(myStreamReader.ReadLine())
End Try

myProcess.Close()

End Sub
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2004-06-08 15:39
引用:

初歩的な質問かもしれないのですが、例外が発生した後に表示される
ダイアログを表示させない方法をご存知のかたがおられたら教えて
頂けないでしょうか?



SetErrorMode() API を P/INVOKE すればいいのかな?
得正カレー
会議室デビュー日: 2004/06/08
投稿数: 15
投稿日時: 2004-06-08 17:22
ご回答ありがとうございます!!
教えて頂いたことをしようとして、

Public Const SEM_FAILCRITICALERRORS = &H1&
Public Const SEM_NOOPENFILEERRORBOX = &H8000&

Declare Function SetErrorMode Lib "kernel32" ( _
ByVal wMode As Long) As Long

のような宣言を書いて

SetErrorMode(SEM_NOOPENFILEERRORBOX)

としてみたのですが、同じ結果になってしまいました。。
INVOKEというのを知らなかったのですが、何か大きな間違いを
してるんでしょうか?

実行するとJITの「デバッグしますか」といった画面が表示されます・・・
初心者なもので正直よくわかっておりません。。
ご教授お願いいたします。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-06-08 20:12
エラーってどこで起きてます?
もしかして、そのエラーが起きている場所そのものがTry〜Catchで
囲まれてないんじゃないか、と思うのですが。。。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2004-06-08 22:03
引用:

Declare Function SetErrorMode Lib "kernel32" ( _
ByVal wMode As Long) As Long



VB.NET のバヤイ、Long ではなく Integer だったかも。
あと、"kernel32" は "kernel32.dll" かも。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
得正カレー
会議室デビュー日: 2004/06/08
投稿数: 15
投稿日時: 2004-06-08 22:34
小野さん、渋木さんありがとうございます!

もしかして何かおかしいことやらかしてます・・・?
エラーは Process.Start() のところで起こってます。

ご指摘いただいた点、try〜catch構文を外したのと
渋木さんのおっしゃっている点を直してみましたが
変化ありませんでした(>_<)

かなり煮詰まってまいりました・・。
でも返答いただいた方本当にありがとうございます。
まだ何かヒントあるようでしたらご助言ください。。
デバッグのダイアログがでなくなればよいのですが・・・
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-06-08 23:17
実際に無いファイルを指定した場合等、Process.Start()でも例外は起きますが、問題はそこではないのでは?
StartしていないProcessのStandardErrorが取れないようですけど。

>「デバッグしますか」といった画面が表示されます・・・

その後にメッセージが出てませんか?
exeをダブルクリックで起動した場合は一瞬しか見えないでしょうが。
コマンドプロンプトからexeを実行してみてください。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2004-06-09 01:18
引用:

エラーは Process.Start() のところで起こってます。



どっちのプロセスでエラーが起きてるんですか?
子プロセスの例外を、親プロセスでハンドルすることはできないですよ。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/

スキルアップ/キャリアアップ(JOB@IT)