Quantcast
Channel: All Open Tickets - Tera Term on OSDN
Viewing all articles
Browse latest Browse all 2128

エラーポップアップの抑止 - Tera Term Ticket #35758 on OSDN

$
0
0

エラーポップアップの抑止

Eröffnet am: 2015-11-18 21:53

Letztes Update: 2019-12-10 19:03

Auswertung:yutakaponVerantwortlicher:(Keine)
Priorität:5 - MittelMeilenstein:(Keine)
Typ:FunktionsanfragenSchweregrad:5 - Mittel
Komponente:Tera TermStatus:Offen
LösungKeine

Einzelheiten

マクロで自動実行する際、警告およびエラーポップアップが出てくると、自動実行が停止してしまうため、
ポップアップの代わりにログファイルに吐くようにする機能がほしいとのこと。一理あるので、
対応を検討する。

http://logmett.com/support-forums/6/error-logging-in-tera-term-2815

Under Additional settings window add a new tab "Error Handling"
Add the following controls to this new tab: 
- Checkbox: "Disable Warning and Error popups". Default - not checked
- Checkbox: "Log Warnings and Errors into file". Default - not checked. When unchecked the next 2 controls should be disabled.
- Text field containing full path to error.log file. 
- Browse button to choose error log file.

Error log file entries should start with time stamp followed by the error or warning message (the same which currently appear in popup window). 

■共通
●方針
・設定方法は、まずはコマンドラインオプションとする。
 余力があれば、ダイアログで設定できるようにする。

・コマンドライン
 [Tera Term]
 /LOGWARNERR=<log file>
 
・ダイアログ設定
 TBD

・実装
 メッセージを MessageBox でポップアップするか、ファイルに出力するか、いずれかの
 処理を行う共通関数を ttpcmn.dll に作成する。これにより、TTSSHなどのプラグイン側からも
 利用することができる。
 
 [ttpcmn]
 void FAR PASCAL NotifyLoggingMessage(char *fmt, ...);
 

・懸念
 ttpcmn 側でどうやってポップアップかファイル出力かを判断するか。
 → ttpcmn.c 内にグローバル変数を持つことができるため、Tera Term起動時、出力方法を示す
    変数をTera Termからttpcmnに設定する。
    
    [ttpcmn]
    void FAR PASCAL SetNotifyLoggingMessageMethod(enum output_style style);
    
    enum output_style {
    	OUTPUT_MESSAGE_POPUP,  // ポップアップ
    	OUTPUT_FILE_LOG,       // ファイル出力
    	OUTPUT_NONE,           // 何もしない。破棄。
    };


■Tera Term
●概要
・ログメッセージをファイルに出力するという機能は元から存在しない。
 そのため、すべて MessageBox() によるポップアップメッセージとなっている。

・MessageBoxの使用は61箇所。
  @ MessageBox()
 
●方針
・コマンドラインから実行された場合にポップアップメッセージとなる箇所について、
 ログ採取方式に切り替えられるようにする。
 
  trunk\teraterm\teraterm\vtwin.cpp(2172):						::MessageBox(NULL, msg, "Tera Term: scpsend command error", MB_OK | MB_ICONERROR);
 → GUI上なので対象外。

  trunk\teraterm\teraterm\vtwin.cpp(4417):		if (::MessageBox(HVTWin, ts.UIMsg, "Tera Term",
 → Disconnect()は、置換対象。引数でFALSEを指定すれば、ポップアップはされないが、
    コマンドラインから実行時に常に FALSE が指定されるわけではない。
 
  trunk\teraterm\teraterm\commlib.c(359):					MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
  trunk\teraterm\teraterm\commlib.c(416):					MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
  trunk\teraterm\teraterm\commlib.c(547):					MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
  trunk\teraterm\teraterm\commlib.c(577):					MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
  trunk\teraterm\teraterm\commlib.c(603):				MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
 → CommOpen()は、置換対象。
 
  trunk\teraterm\teraterm\commlib.c(779):						MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
  trunk\teraterm\teraterm\commlib.c(817):				MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
  trunk\teraterm\teraterm\commlib.c(840):				MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
 → CommStart()は、置換対象。

  trunk\teraterm\teraterm\ttdde.c(871):		MessageBox(NULL, msg, "Tera Term: scpsend command error", MB_OK | MB_ICONERROR);
  trunk\teraterm\teraterm\ttdde.c(907):		MessageBox(NULL, msg, "Tera Term: scpsend command error", MB_OK | MB_ICONERROR);
 → AcceptExecute()は、置換対象。



■TTSSH
●概要
・元々、ログメッセージをファイル(TTSSH.LOG)に出力する機能はあり、
 teraterm.ini の LogLevel で0以外にすればよい。
 ファイルに出力する関数は下記の通り。
 @ notify_verbose_message(), logprintf_hexdump(), logprintf()
 
・下記関数はログ採取に加えて、エラーポップアップを行い、かつセッションを切断する。
 @ notify_fatal_error()

・下記関数はログ採取に加えて、エラーポップアップを行う。
 pvar->showing_err=TRUEとすれば、ポップアップは抑止できる。
 @ notify_nonfatal_error()

・NotificationWindowに WM_USER_COMMNOTIFY を送信する。Tera Term側の OnCommNotify() が呼び出される。
 この呼び出しはセッションを切断するためのものなので、呼び出し自体をスキップすることはできない。
 @ notify_closed_connection(), notify_fatal_error(), PKT_recv()

・MessageBoxの使用は37箇所。
  @ MessageBox()

●方針
・エラーメッセージに関しては、すべて notify_fatal_error() , notify_nonfatal_error() に
 置き換えて、設定によりポップアップかログ採取か切り替えるようにする。

・置換対象は MessageBox で、かつエラーメッセージであるもの。
 ユーザへの問い合わせ(Yes or No)は対象外。
 
 エラーメッセージ   関数名
                    FWD_agent_forward_confirm 
 YES                SSH_scp_transaction
                    handle_SSH2_dh_gex_group
                    handle_SSH2_userauth_inforeq
 YES                passwd_change_dialog
 YES                SSH2_scp_fromremote
 YES                SSH2_scp_response
 YES                notify_nonfatal_error
 YES                TTXHostDlg
 YES                TTXParseParam
 YES                get_keys_file_name
 YES                save_bcrypt_private_key
 (*1)               TTXKeyGenerator
 (*1)               TTXProcessCommand
 YES                TTXEnd
 YES                modalfatalbox

  (*1) エラーメッセージだが、マクロでは使わない機能のため対象外。



■TTProxy
●概要
・ログメッセージをファイルに出力するという機能は実装上存在するが、明文化はされていない。デバッグ用途。
 そのため、すべて MessageBox() によるポップアップメッセージとなっている。
 
 @ teraterm.ini
 [TTProxy]
 DebugLog="ログファイルパス"

●方針
・コマンドラインから実行された場合にポップアップメッセージとなる箇所について、
 ログ採取方式に切り替えられるようにする。

  trunk\TTProxy\TTProxy.h(258):				::MessageBox(hWin, msg, "TTProxy", MB_OK | MB_ICONERROR);
  → showMessage()->add_error_message() で通信中のエラーメッセージの出力に使われる。
  
  trunk\TTProxy\TTProxy.h(282):			::MessageBox(NULL, getInstance().error_message, "TTProxy", MB_OK | MB_ICONERROR);
  → TTXEnd()で終了時、エラーメッセージの出力に使われる。
  

Letzte Aktualisierung für dieses Ticket

2019-12-10 19:03 Aktualisiert von: yutakapon

  • Verantwortlicher Update from yutakapon to (Keine)
  • Details Updated

Viewing all articles
Browse latest Browse all 2128