質問
何が最善の方法を検出用クラッシュXP(生は'エラー'windows各時間毎に同じウィンドウタイトル)として再スターです。
私にともない、最近、よく聞くのソリューション用の最低限のシステムリソースとしてのシステムであるというものです。
と思っていたのですが用スクリプト言語のようにAutoIt(http://www.autoitscript.com/autoit3/)、その発動は"検出器のスクリプトなかった。
このようにPython,Perl、ユー又は僕ら?
そのアイデア、ヒント、または考えをよろしくお願いいたします。
編集:なので実際にストレスとソーシャル-サポートする口/終了-ん@tialaramex).このダイアログを表示待ちのユーザー入力後、他のダイアログを待ってさらにユーザー入力が実際に終了します。でこれらのダイアログおきたいと思いますの検知し対応します。
解決
かつラッパーを起動するアプリケーションの故障アプリとして子どもを待ちですか?た場合の終了コードの子どもがエラーを示す、その後再起動してかります。
他のヒント
るという方向指定 ミューテックス.
- 開始します。
- 新しい名前のミューテックスを積むことができます。で
- 新しい工程(プロセスはスレッドは、新たに申請し、そのままpreffer.
- そのプロセス-適用してみ詞のミューテックス.のプロセスをブロック
- 申込みいただく場合、お申込み仕上げにリリースのミューテックス(信号)
- の制御プロセスのみ詞のミューテックスの場合は、申込終了またはアプリケーションがクラッシュします。
- 試験の後の状態が寄せらのミューテックス.がある場合、アプリケーションが墜落すWAIT_ABANDONED
説明: スレッドが終了せずに放出のミューテックスその他の処理を待つので兼ね備え、確か得WAIT_ABANDONED戻り値には、ミューテックスは放棄され、※の項で保護できる安全ではない。
このように第二のアプリな消費意CPUサイクルしていくのを待って、ミューテックス(ことになるenterely扱うオペレーティングシステム
になっていると思いま問題の研ワトソンのダイアログを表示 保おります。
で記入することができるデバッガ用のWindows API のぶからである。これを防止その他のデバッガからのクラッシュの お申込ときまたは例外をキャッチし、この例外イベントです。
せっかく見つかりませんでサンプルコードを書いたこ Python速や汚れたサンプルです。私にはどのように強い 特にこの宣言のDEBUG_EVENTが向上します。
from ctypes import windll, c_int, Structure
import subprocess
WaitForDebugEvent = windll.kernel32.WaitForDebugEvent
ContinueDebugEvent = windll.kernel32.ContinueDebugEvent
DBG_CONTINUE = 0x00010002L
DBG_EXCEPTION_NOT_HANDLED = 0x80010001L
event_names = {
3: 'CREATE_PROCESS_DEBUG_EVENT',
2: 'CREATE_THREAD_DEBUG_EVENT',
1: 'EXCEPTION_DEBUG_EVENT',
5: 'EXIT_PROCESS_DEBUG_EVENT',
4: 'EXIT_THREAD_DEBUG_EVENT',
6: 'LOAD_DLL_DEBUG_EVENT',
8: 'OUTPUT_DEBUG_STRING_EVENT',
9: 'RIP_EVENT',
7: 'UNLOAD_DLL_DEBUG_EVENT',
}
class DEBUG_EVENT(Structure):
_fields_ = [
('dwDebugEventCode', c_int),
('dwProcessId', c_int),
('dwThreadId', c_int),
('u', c_int*20)]
def run_with_debugger(args):
proc = subprocess.Popen(args, creationflags=1)
event = DEBUG_EVENT()
while True:
if WaitForDebugEvent(pointer(event), 10):
print event_names.get(event.dwDebugEventCode,
'Unknown Event %s' % event.dwDebugEventCode)
ContinueDebugEvent(event.dwProcessId, event.dwThreadId, DBG_CONTINUE)
retcode = proc.poll()
if retcode is not None:
return retcode
run_with_debugger(['python', 'crash.py'])
こんに対Windows XP、またはそれに準じる状況下でVista新 クラッシュ復旧APIs可能です。 こちらの紹介 るものになってきました。
こちらは若干改善します。
私の試験の前のコード実行は無限ループが故障exe生成される"アクセス違反".
私は徹底した品質管理を行い安全で自分で解決して明確な基準を知する例外で継続する必要があるが、できないのExceptionFlagsはない)
することが明らかにしました。
希望です ヴィヴィアデSmedt
from ctypes import windll, c_uint, c_void_p, Structure, Union, pointer
import subprocess
WaitForDebugEvent = windll.kernel32.WaitForDebugEvent
ContinueDebugEvent = windll.kernel32.ContinueDebugEvent
DBG_CONTINUE = 0x00010002L
DBG_EXCEPTION_NOT_HANDLED = 0x80010001L
event_names = {
1: 'EXCEPTION_DEBUG_EVENT',
2: 'CREATE_THREAD_DEBUG_EVENT',
3: 'CREATE_PROCESS_DEBUG_EVENT',
4: 'EXIT_THREAD_DEBUG_EVENT',
5: 'EXIT_PROCESS_DEBUG_EVENT',
6: 'LOAD_DLL_DEBUG_EVENT',
7: 'UNLOAD_DLL_DEBUG_EVENT',
8: 'OUTPUT_DEBUG_STRING_EVENT',
9: 'RIP_EVENT',
}
EXCEPTION_MAXIMUM_PARAMETERS = 15
EXCEPTION_DATATYPE_MISALIGNMENT = 0x80000002
EXCEPTION_ACCESS_VIOLATION = 0xC0000005
EXCEPTION_ILLEGAL_INSTRUCTION = 0xC000001D
EXCEPTION_ARRAY_BOUNDS_EXCEEDED = 0xC000008C
EXCEPTION_INT_DIVIDE_BY_ZERO = 0xC0000094
EXCEPTION_INT_OVERFLOW = 0xC0000095
EXCEPTION_STACK_OVERFLOW = 0xC00000FD
class EXCEPTION_DEBUG_INFO(Structure):
_fields_ = [
("ExceptionCode", c_uint),
("ExceptionFlags", c_uint),
("ExceptionRecord", c_void_p),
("ExceptionAddress", c_void_p),
("NumberParameters", c_uint),
("ExceptionInformation", c_void_p * EXCEPTION_MAXIMUM_PARAMETERS),
]
class EXCEPTION_DEBUG_INFO(Structure):
_fields_ = [
('ExceptionRecord', EXCEPTION_DEBUG_INFO),
('dwFirstChance', c_uint),
]
class DEBUG_EVENT_INFO(Union):
_fields_ = [
("Exception", EXCEPTION_DEBUG_INFO),
]
class DEBUG_EVENT(Structure):
_fields_ = [
('dwDebugEventCode', c_uint),
('dwProcessId', c_uint),
('dwThreadId', c_uint),
('u', DEBUG_EVENT_INFO)
]
def run_with_debugger(args):
proc = subprocess.Popen(args, creationflags=1)
event = DEBUG_EVENT()
num_exception = 0
while True:
if WaitForDebugEvent(pointer(event), 10):
print event_names.get(event.dwDebugEventCode, 'Unknown Event %s' % event.dwDebugEventCode)
if event.dwDebugEventCode == 1:
num_exception += 1
exception_code = event.u.Exception.ExceptionRecord.ExceptionCode
if exception_code == 0x80000003L:
print "Unknow exception:", hex(exception_code)
else:
if exception_code == EXCEPTION_ACCESS_VIOLATION:
print "EXCEPTION_ACCESS_VIOLATION"
elif exception_code == EXCEPTION_INT_DIVIDE_BY_ZERO:
print "EXCEPTION_INT_DIVIDE_BY_ZERO"
elif exception_code == EXCEPTION_STACK_OVERFLOW:
print "EXCEPTION_STACK_OVERFLOW"
else:
print "Other exception:", hex(exception_code)
break
ContinueDebugEvent(event.dwProcessId, event.dwThreadId, DBG_CONTINUE)
retcode = proc.poll()
if retcode is not None:
return retcode
run_with_debugger(['crash.exe'])