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

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

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

Re[10]: C#フォームを強制終了


(過去ログ 128 を表示中)

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

■76254 / inTopicNo.1)  C#フォームを強制終了
  
□投稿者/ たくや (18回)-(2015/06/18(Thu) 21:38:10)
たくや さんの Web サイト

分類:[C#] 

C#のフォームがタスクマネージャーによって強制終了された場合、強制終了を検知することはできますでしょうか?
引用返信 編集キー/
■76255 / inTopicNo.2)  Re[1]: C#フォームを強制終了
□投稿者/ 魔界の仮面弁士 (384回)-(2015/06/18(Thu) 21:52:46)
No76254 (たくや さん) に返信
> C#のフォームがタスクマネージャーによって強制終了された場合、強制終了を検知することはできますでしょうか?

FormClosing イベントの引数 e.CloseReason が
TaskManagerClosing か否かで判断できないでしょうか。

http://dobon.net/vb/dotnet/form/unloadmode.html
引用返信 編集キー/
■76256 / inTopicNo.3)  Re[2]: C#フォームを強制終了
□投稿者/ たくや (20回)-(2015/06/18(Thu) 22:08:27)
たくや さんの Web サイト
No76255 (魔界の仮面弁士 さん) に返信
> ■No76254 (たくや さん) に返信
>>C#のフォームがタスクマネージャーによって強制終了された場合、強制終了を検知することはできますでしょうか?
>
> FormClosing イベントの引数 e.CloseReason が
> TaskManagerClosing か否かで判断できないでしょうか。
>
> http://dobon.net/vb/dotnet/form/unloadmode.html

返信ありがとうございます。
先程FormClosingイベントでキャッチできるか確認しましたが、タスクマネージャから落とした場合キャッチすることはできませんでした。
FormClosedの方も確認してみたのですがキャッチすることができませんでした。

windows(7)が終了する時必ず強制終了してしまうのでそれを回避したいのですが何か方法はないでしょうか。
引用返信 編集キー/
■76257 / inTopicNo.4)  Re[3]: C#フォームを強制終了
□投稿者/ Azulean (494回)-(2015/06/18(Thu) 22:22:13)
2015/06/18(Thu) 22:24:08 編集(投稿者)

方法はありません。
何をやりたかったのかを明示することで別の案のアドバイスがもらえる可能性はありますが…。


TaskManagerClosing はプロセスタブではなく、アプリケーションタブからの操作の場合です。
ただし、Windows 8 頃からは TaskManagerClosing で通知されるような閉じ方はなくなっているはずです。
(また、TaskManagerClosing = タスクマネージャーからとは限らず、CloseWindow が呼ばれたらその理由になるだけという、名前に合っていない列挙値なのでした)
引用返信 編集キー/
■76259 / inTopicNo.5)  Re[4]: C#フォームを強制終了
□投稿者/ たくや (21回)-(2015/06/18(Thu) 22:38:48)
たくや さんの Web サイト
No76257 (Azulean さん) に返信
> 2015/06/18(Thu) 22:24:08 編集(投稿者)
>
> 方法はありません。
> 何をやりたかったのかを明示することで別の案のアドバイスがもらえる可能性はありますが…。
>
>
> TaskManagerClosing はプロセスタブではなく、アプリケーションタブからの操作の場合です。
> ただし、Windows 8 頃からは TaskManagerClosing で通知されるような閉じ方はなくなっているはずです。
> (また、TaskManagerClosing = タスクマネージャーからとは限らず、CloseWindow が呼ばれたらその理由になるだけという、名前に合っていない列挙値なのでした)

返信ありがとうございます。
何がやりたかったかというと、タスクマネージャやwindowsのシャットダウン時にプログラムが落ちたかどうかを保存する機能がありまして、そのために処理の終了したかの値が欲しいということでした。

一つ考えられるのは別プロセスを動かし監視するということが一点方法として模索しています。

もう一点がwindows終了時に確認する方法ですが、この前DLLインジェクションという機能を知りそれが使えないかどうか考えています。
ですが、まだ勉強不足で何もやっていないのでその点で解決できないかどうかアドバイス貰えたら助かります。


引用返信 編集キー/
■76261 / inTopicNo.6)  Re[5]: C#フォームを強制終了
□投稿者/ Azulean (495回)-(2015/06/19(Fri) 06:09:13)
No76259 (たくや さん) に返信
> 何がやりたかったかというと、タスクマネージャやwindowsのシャットダウン時にプログラムが落ちたかどうかを保存する機能がありまして、そのために処理の終了したかの値が欲しいということでした。

複数起動しないアプリでの一案として。

1.アプリを起動したら「起動中」であることを保存しておく。
2.正常終了時はその情報を消す形にしておく。
3.アプリ起動時に「起動中」という状態が残っていれば、前回は強制終了された可能性があると判断する。


> 一つ考えられるのは別プロセスを動かし監視するということが一点方法として模索しています。

その監視プロセスが先に終了されることがありませんか?
そういう意味では安定的とは言いがたいかと思います。


> もう一点がwindows終了時に確認する方法ですが、この前DLLインジェクションという機能を知りそれが使えないかどうか考えています。
> ですが、まだ勉強不足で何もやっていないのでその点で解決できないかどうかアドバイス貰えたら助かります。

DLL Injection は他のプロセスに DLL を介入させるテクニックですが、どこに注入すれば解決すると考えていますか?
また、ネイティブコードを書ける以上の実力を求めますが、本当にやりますか?(勉強不足と書くという時点でやめた方がいいと私は思いますが…)
引用返信 編集キー/
■76264 / inTopicNo.7)  Re[6]: C#フォームを強制終了
□投稿者/ たくや (22回)-(2015/06/19(Fri) 08:59:46)
No76261 (Azulean さん) に返信

>Azuleanさん
返信ありがとうございます。

> その監視プロセスが先に終了されることがありませんか?
> そういう意味では安定的とは言いがたいかと思います。

監視プロセスは1PCに対して1個常駐させX.exeを起動することができます。
AのPCでは常にX.exeがないことを確認し、X.exeを起動させ続けます。
BのPCではiniファイルを通じてAのPCでX.exeが起動されてないことを確認しX.exeを起動させます。
以上が今作ろうとしているものの仕様になります。
この件に関しては解決し実装済みです。

> また、ネイティブコードを書ける以上の実力を求めますが、本当にやりますか?(勉強不足と書くという時点でやめた方がいいと私は思いますが…)

DLL Injectionなのですが以下のサイトでC#で書かれているので、C#を使ってコーディングできないものかと考えています。
追々C++も勉強するつもりですが、今することはないと思います。何か月か先になります。

http://popopondelion.blog.fc2.com/blog-entry-22.html

> DLL Injection は他のプロセスに DLL を介入させるテクニックですが、どこに注入すれば解決すると考えていますか?

できるかわからないのですが、シャットダウン時に使用されるDLLがわかればいけるのではないかと考えています。

昨日色々調べた結果、以下のサイトでできました。
http://dobon.net/vb/dotnet/system/sessionending.html

ただDLLインジェクションの件も解決したいので解決済みにはまだしないでおこうと思います。

引用返信 編集キー/
■76269 / inTopicNo.8)  Re[7]: C#フォームを強制終了
□投稿者/ Azulean (497回)-(2015/06/19(Fri) 12:45:22)
No76264 (たくや さん) に返信
> DLL Injectionなのですが以下のサイトでC#で書かれているので、C#を使ってコーディングできないものかと考えています。

そのサイトで C# で書かれているのは注入する処理です。
注入する DLL は .NET の DLL だとうまくいかない可能性があると認識していますが、最近変わってるなら私が追えていないかもしれません。
.NET としての初期化はいつ、誰がするのかとか、LoadLibraryA のあと、C# のコードをどのように動かせばよいのかというあたりを不思議に感じませんか?
引用返信 編集キー/
■76271 / inTopicNo.9)  Re[8]: C#フォームを強制終了
□投稿者/ たくや (23回)-(2015/06/19(Fri) 13:31:06)
No76269 (Azulean さん) に返信
> そのサイトで C# で書かれているのは注入する処理です。
> 注入する DLL は .NET の DLL だとうまくいかない可能性があると認識していますが、最近変わってるなら私が追えていないかもしれません。
> .NET としての初期化はいつ、誰がするのかとか、LoadLibraryA のあと、C# のコードをどのように動かせばよいのかというあたりを不思議に感じませんか?

言われている通り正直どのように動かせば良いのかまだ調べられていません。
そもそもシャットダウンをさせる時にプロセスが立ち上がってされるのかも正直わかっていない状態です。
あと注入してDLLの処理をどのように実行するかもわかっていません。
引用返信 編集キー/
■76282 / inTopicNo.10)  Re[9]: C#フォームを強制終了
□投稿者/ Azulean (498回)-(2015/06/20(Sat) 00:21:34)
No76271 (たくや さん) に返信
> 言われている通り正直どのように動かせば良いのかまだ調べられていません。
> そもそもシャットダウンをさせる時にプロセスが立ち上がってされるのかも正直わかっていない状態です。
> あと注入してDLLの処理をどのように実行するかもわかっていません。

現実問題として、C# は注入する DLL の言語にならないと考えられます。
また、他のプロセスに注入するということは、あなたの書いたコードによってそのプロセスが落ちてしまうことがあり得ます。
すると、Visual Studio やエクスプローラーなども落ち始めて、最悪、Windows の再インストールに至ることすらある危険が伴う要素です。

そういった難易度の高い領域であることと、それに対して要求が見合うのかどうかを考えて、採用するテクニックの選択、あるいは仕様の調整も技術者に必要なスキルです。
個人的にはシャットダウン開始を検知できればよいのであれば、DLL Injection に手を出すのは見合わないと思っています。
引用返信 編集キー/
■76283 / inTopicNo.11)  Re[10]: C#フォームを強制終了
□投稿者/ たくや (24回)-(2015/06/20(Sat) 07:09:39)
No76282 (Azulean さん) に返信
> 現実問題として、C# は注入する DLL の言語にならないと考えられます。
> また、他のプロセスに注入するということは、あなたの書いたコードによってそのプロセスが落ちてしまうことがあり得ます。
> すると、Visual Studio やエクスプローラーなども落ち始めて、最悪、Windows の再インストールに至ることすらある危険が伴う要素です。
>
> そういった難易度の高い領域であることと、それに対して要求が見合うのかどうかを考えて、採用するテクニックの選択、あるいは仕様の調整も技術者に必要なスキルです。
> 個人的にはシャットダウン開始を検知できればよいのであれば、DLL Injection に手を出すのは見合わないと思っています。

確かにそうですね。ちょっとDLLインジェクションは難しすぎますよね。
コードみてもどうなってるのか今一掴めないです。
また、C++を触る機会があると思うのでその時までちょっとこの件は置いて於こうかと思います。
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -