• ベストアンサー

プロセスの終了コードについて教えてください

itohhの回答

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.2

こんにちは。itohhといいます。 >アクセス違反などで異常終了したとき 基本的に例外処理を行っていないとシステムで「デバッグするか?」というダイアログを 表示してしまいます。 わたしがよく使う方法は。 例外処理(try、catch)で例外エラーを拾います。そして、エラーコードとメッセージを 取得してexit関数で終了コードを指定するようにします。 (実際のエラーコード、エラーメッセージはNTのイベントログに出力する) 例えば。 正常終了なら0。 異常終了なら1。(エラーによって詳細に分けても良いです。) などです。 これで、終了を監視しているプロセスで統一したコードが渡ります。 こんな方法では如何でしょうか? try、catchの使い方は、MSDNライブラリを参照してください。

nabezo-
質問者

お礼

アドバイスありがとうございました。 参考にさせて頂きます。

関連するQ&A

  • サービスEXEのプロセス終了について

    VC6.0 ATL COM AppWizard で作成したWindowsサービスについて質問です。 サービスが停止できなかった場合など、サービスEXEをタスクマネージャからプロセスの終了したいのですが、 Windows2000の場合、「アクセスが拒否されました。」と表示され、終了できません。 サービスEXEをタスクマネージャから終了できるのか、またそのために必要なコードをご教授願います。 サービス関連のロジックは ATL COM AppWizard で作成されたまま使用しております。

  • アクセス違反でアプリケーションポップアップが出たのにプロセスが終了しない

    OS:Windows2000、VC++6.0 の環境です。 自作のアプリケーションにてアクセス違反が発生し、 以下のアプリケーションポップアップが出ました。 アプリケーションポップアップ: AAA.exe - アプリケーション エラー : "0x0c88026d" の命令が "0x09680048" のメモリを参照しました。 メモリが "written" になることはできませんでした。 プログラムを終了するには [OK] をクリックしてください プログラムをデバッグするには [キャンセル] をクリックしてください で、「OK」ボタンを押したのですが、プロセスは終了せず、 処理が続行されてしまいました。 なぜプロセスが終了しないのかがわかりません。 何かの設定でしょうか??? 識者の方、ご教授願います。

  • avast!が終了できません(プロセス

    質問すべき事ではないのかもしれませんがよろしくお願いします 私はセキュリティソフトにavast!を使用しているのですが、パソコンのメモリが少なめなので、インターネットに接続しない時等必要の無い時はタスクマネージャのプロセスから直に切っていたのですが(終了させる等のボタンが無いため)、先日から急に終了させようとしても「操作を完了できませんでした。アクセスが拒否されました。」と出て終了できずにいます。 ExitAを使いサービスを停止させてもプロセス自体が残っているので正直邪魔で仕方が無いのです。 何か良い方法は無いのでしょうか。よろしくお願いします

  • あるユーザーのプロセスを終了するスクリプト

    あるユーザーのプロセスを終了するスクリプト お世話になっております。 VBSを使用してUser01が起動したJAVAプロセスを終了するスクリプトを作成する事を検討しています。 wmiを使って以下のようなコード(一部抜粋)を書くと、プロセスは終了できるのですが、 これからどうやってユーザを特定させるのかわかりません。 Set objProcessList = objWmiService.ExecQuery("Select * From Win32_Process where Caption = 'java.exe'") 'javaのプロセスを全部殺す For Each objProcess In objProcessList   result = objProcess.Terminate   If result <> 0 Then   msgbox "エラー" End IF Next アドバイスをお願いします。

  • 「プロセスの終了」は危険ですか?

    「MSQRY32.EXE」というのが重過ぎて ずっとCPUが100%です。 しかも「MSQRY32.EXE」は2個あり、2つでCPUが100%なってしまいます。 アプリケーションのアクセスとエクセルを終了しましたが 何も変りません。 ほかに「MSQRY32.EXE」にかかわるアプリケーションは開いていません。 (現在IEのみ起動) こういう場合、タスクマネージャーの プロセスの終了から終わらせるのでしょうか? なにやら警告画面がでるので勇気がでずできません。 アドバイスよろしくお願いします。

  • スレッドの終了コード

    VC6.0でダイアログアプリケーションを作成しています。 デバッグモードで終了させると、アウトプットウィンドウに  スレッド 0x1124 終了、終了コード 0 (0x0)。  スレッド 0x1408 終了、終了コード 0 (0x0)。  スレッド 0x1118 終了、終了コード -1 (0xFFFFFFFF)。  スレッド 0x108C 終了、終了コード 0 (0x0)。 という内容が出力されるのですが、 終了コードが-1というのは異常終了になりますか? その場合、スレッド0x118を特定することはできるでしょうか? よろしくお願いいたします。

  • cvLoadImageを使用するとプロセスが終了できません。

    cvLoadImageを使用するとプロセスが終了できません。 OpenCV1.1を使用して開発を行っているのですが、OpenCVの関数であるcvLoadImageとMFCのクラスであるCFileDialogを一緒に使用した場合、アプリケーションの終了時にプロセスが残ってしまいます。 デバッグ実行の場合、完全に終了まで至らない。 リリースビルドの実行ではタスクマネージャで確認する限りプロセスが残っています。 この現象は以下のコードを実行した場合発生しているようです。 逆に言えばこのコードを実行しなければ正常に終了します。 ■現象の発生するコード   IplImage* pImage ;   CString strFilePath = "c:\\a.jpg";   CFileDialog dlg(  TRUE,             NULL,             NULL,             OFN_FILEMUSTEXIST | OFN_HIDEREADONLY,             _T("すべてのファイル(*.*)|*.*||")           ) ;   if( IDOK == dlg.DoModal() ) {     strFilePath = dlg.GetPathName() ;     TRACE( "%s\n", strFilePath ) ;     pImage = cvLoadImage( strFilePath , 1 ) ;     cvReleaseImage( &pImage ) ;     } http://questionbox.jp.msn.com/qa5084716.html ここを読むと似たような現象で、回避方法としてOpenCV1.0にすると書かれています。 関数やコンパイラの環境、症状がやや異なるので、同じかどうかは分かりませんが、なんとかOpenCV1.1でCFileDialogを使用したいのです。 よい回避方法がありましたらお教えください。 よろしくお願いします。 ■開発環境 ・VC++6.0 ・OpenCV1.1pre ・WindowsXP OpenCV2.0への変更とVC++6.0以外のコンパイラへの変更は考えていません。

  • C言語 特定のプロセスの終了を監視

    I フィルター(有害サイトブロックソフト)って知っていますか?あのソフトは、2つのプログラムから成っていて、片方のプロセスを終了させるともう片方のプロセスが起動し、互いに監視しあっているので簡単には終了できません。 そのようなこと(つまり、簡単に終了させることができないようにプロセス2つで監視し合っている)をC言語で行いたいのですが、プロセスを監視するとか全然わかりません。 とっても初心者なので、できる限り詳しく、ソースコードなどもあればとてもうれしいのですが・・・ 手間のかかる質問ですが、どうぞ回答してくださるかたよろしくお願いします。

  • ユーザのプロセスを終了する方法

    Windows Server 2008 R2で仮想デスクトップを使用しています。(XenApp 6.5を使用) サーバには80名程度のユーザがログオンして、それぞれアプリケーションを起動しているため、 プロセスの数が非常に多くなります。(同じプロセス名でもユーザ数分起動しているため) 上記の環境であるアプリを終了する際に、サブ画面のプロセスが起動している場合は 一緒に終了するような作りにしたいと考えており、現在のところ以下のWMIのスクリプトを 使用してプロセスの一覧を取得し、for文で一覧から該当するプロセスIDを特定してkillする というような仕組みを検討しております。 Strcomputer = "." Set objWMIService = GetObject("winmgmts:\\" & Strcomputer & "\root\cimv2") Set colitems = objWMIService.ExecQuery("Select * from Win32_Process", , 48) ただ、上記のようにWin32_Processを使用すると、サーバ上で起動している全ユーザの プロセスが検索対象となってしまうため、処理に時間がかかることを懸念しております。 可能であれば、そのユーザだけのプロセスを検索対象としたいのですが、 そのような方法はありますでしょうか? WMI以外の方法でも構いませんので、アドバイスを頂けると助かります。

  • Access からオブジェクトとして開いたExcelのプロセスが終了しない

    AccessからExcelのデータを読み込んだ後、Accessを終了させてもプロセスが終了しません。 bookはclose、applicationはquit、オブジェクト変数はnothingというExcelの終了記述をしているので他の問題なのかと思いいろいろ調べて試しましたが解決できません。 Excelのファイル名とシート名はAccessのフォームに貼り付けたテキストボックスの値を取得させていますが下記コードでは省略しています。環境はWin2000Server、Access2000です。 どなたかお気づきの点があればどうぞご教授お願いします。 --------------------------------- Public Sub test() Dim filename As String Dim sheetname As String filename = "c:\パス\ファイル名.xls" sheetname = "シート名" 'AccessからExcelをオブジェクトとして開く Dim xlApp As Object Dim xlBook As Object Dim xlSheet As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(filename) Set xlSheet = xlBook.Worksheets(sheetname) 'Excelの行取得用変数設定 Dim xlrow As Integer 'データ開始行 xlrow = 5 Dim xlrowEnd As Integer 'データ最終行(最終行は合計値が入っているので-1とする) xlrowEnd = (Range("A5").End(xlDown).Row) - 1 'Excelデータの取り込み Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "a", cn, adOpenKeyset, adLockOptimistic cn.Execute "delete * from a" xlrow = 5 'Excelデータの開始行番号 Do While xlrow <= xlrowEnd rs.AddNew rs!フィールド1 = xlSheet.Cells(xlrow, 1).Value rs!フィールド2 = xlSheet.Cells(xlrow, 2).Value rs.Update rs.MoveNext xlrow = xlrow + 1 Loop 'Excelの終了記述 xlBook.Close xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing 'ADO接続終了記述 rs.Close Set rs = Nothing cn.Close Set cn = Nothing