- PR -

プロセスを切るには

投稿者投稿内容
MyHandle
常連さん
会議室デビュー日: 2007/04/15
投稿数: 39
投稿日時: 2007-09-05 13:41
VisualStudio.NET 2005 (VB)
WindowsXPProSP2

ソリューションに
A windowsアプリケーション
B setup 
の2つのプロジェクトがあります。
Setupの実行時に Aをスタートアップに登録し、再起動後起動されるようにします。
AにはContextMenuStripコントロールを追加しており、このメニューから”終了”を
選んだ場合はプロセスを切るようにしています。
Dim myProcess As Process = Process.GetCurrentProcess()
myProcess.Kill()
が、アンインストールしたときはプロセスが残ってしまいます。(タスクマネージャで確認)このプロセスが残っていると電源が切れないということは確認しています。
アンインストール時に直ちにプロセスを切ることはできないのでしょうか?


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

AにはContextMenuStripコントロールを追加しており、このメニューから”終了”を
選んだ場合はプロセスを切るようにしています。
Dim myProcess As Process = Process.GetCurrentProcess()
myProcess.Kill()



・GUI アプリならメインウィンドウを Close()
・コンソールアプリなら Environment.Exit()

という穏便な手順がありますが、それじゃ駄目なんですか?

引用:

アンインストール時に直ちにプロセスを切ることはできないのでしょうか?



インストーラのアンインストールのシーケンスにそういう(=起動済みのアプリケーションを終了する)カスタムアクションを追加するのが正攻法です。

が、Visual Studio のデプロイメントプロジェクト(のエディタ)はカスタムアクションの追加をまともに支援してくれないので、正攻法で行く場合は Windows SDK に含まれている Orca などのツールを駆使しなければなりません。
MyHandle
常連さん
会議室デビュー日: 2007/04/15
投稿数: 39
投稿日時: 2007-09-05 16:42
[quote]
渋木宏明(ひどり)さんの書き込み (2007-09-05 14:19) より:
引用:

AにはContextMenuStripコントロールを追加しており、このメニューから”終了”を
選んだ場合はプロセスを切るようにしています。
Dim myProcess As Process = Process.GetCurrentProcess()
myProcess.Kill()



・GUI アプリならメインウィンドウを Close()
・コンソールアプリなら Environment.Exit()

という穏便な手順がありますが、それじゃ駄目なんですか?


Formを閉じるイベントでは
Me.Visible = False
Me.Enabled = False
Me.WindowState = FormWindowState.Minimized
e.Cancel = True
として、終了しないようにしています。インジケータのアイコン(NotifyIconコントロール)ダブルクリックでformを表示させ、closeイベントで上記を行っています。loadイベントではまだformは見えない状態です。このアイコンを右クリックで終了メニューを選択すると先の投稿のような処理を行っています。

したがって現在、終了メニューを選択するとプロセスは切れますが、アンインストールではプロセスはそのまま残ります。

セットアッププロジェクトのアンインストール処理を書き換えないと無理(標準のセットアッププロジェクトでは無理)ということですね?

わかりました。どうもありがとうございます。

渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-09-05 19:04
引用:

Formを閉じるイベントでは
Me.Visible = False
Me.Enabled = False
Me.WindowState = FormWindowState.Minimized
e.Cancel = True
として、終了しないようにしています。



.NET 1.x ならともかく、.NET 2.0 で追加された FormClosing イベントを使えば、もっと穏便な実装が可能です。

そうすれば、「自プロセスの強制終了でアプリ終了」なんてゆー悲壮なことをしないでも済むはずです。
MyHandle
常連さん
会議室デビュー日: 2007/04/15
投稿数: 39
投稿日時: 2007-09-05 23:47
[quote]
渋木宏明(ひどり)さんの書き込み (2007-09-05 19:04) より:
引用:

Formを閉じるイベントでは
Me.Visible = False
Me.Enabled = False
Me.WindowState = FormWindowState.Minimized
e.Cancel = True
として、終了しないようにしています。
------------
.NET 1.x ならともかく、.NET 2.0 で追加された FormClosing イベントを使えば、もっと穏便な実装が可能です。

そうすれば、「自プロセスの強制終了でアプリ終了」なんてゆー悲壮なことをしないでも済むはずです。



ここで挙げたソースはFormClosingのイベントの一部です。
何が足りないのでしょうか?
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-09-06 00:05
引用:

MyHandleさんの書き込み (2007-09-05 23:47) より:
ここで挙げたソースはFormClosingのイベントの一部です。
何が足りないのでしょうか?


Reasonの活用
_________________
質問する前にググレカス
MyHandle
常連さん
会議室デビュー日: 2007/04/15
投稿数: 39
投稿日時: 2007-09-06 08:57
引用:

ぶさいくろうさんの書き込み (2007-09-06 00:05) より:
Reasonの活用




できることはやってそのうえで投稿しています。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-09-06 20:04
引用:

MyHandleさんの書き込み (2007-09-06 08:57) より:
引用:

ぶさいくろうさんの書き込み (2007-09-06 00:05) より:
Reasonの活用




できることはやってそのうえで投稿しています。


やれやれ。シグネチャに返信がくるとは思わなかったな。
そして引用した内容は無視とはなかなかやるなぁ。
_________________
質問する前にググレカス

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