- PR -

アプリケーションが実行中か検出する方法

投稿者投稿内容
shinovi
常連さん
会議室デビュー日: 2003/06/24
投稿数: 23
投稿日時: 2003-09-09 14:04
アプリケーションを実行する際に
同じアプリケーションが既に実行中かどうかを検出することは可能なのでしょうか?

可能であれば
既に実行中の場合はそれ以上実行できないようにしたいのですが
どうしたらいいのでしょうか?
PoH
常連さん
会議室デビュー日: 2003/09/09
投稿数: 48
投稿日時: 2003-09-09 15:14
可能です
GetProcessesByNameメソッドをご覧になるといいと思います。

If (UBound(Diagnostics.Process.GetProcessesByName _
(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0) = True Then
Exit Sub
End If

のような感じで可能だと思います。
Beatle
ぬし
会議室デビュー日: 2003/06/09
投稿数: 394
投稿日時: 2003-09-09 15:20
同じアプリケーションと言ってもそのアプリケーションが自前のものかどうかで
かなり変わってきます。

まず、自前のアプリケーションの場合、要するにそのアプリケーションが2重起動
しないように、自分自身の中に「既に起動されていればなにもせず終了」するよう
にしておけばよいでしょう。
(VC系なら、mutex : MUTual EXclusion、VB系ならApp.PrevInstance あたり
 かな?.netが無いので不確かですが)

問題は自前のアプリから他のアプリを監視する場合ですが、動作しているかどう
かのチェックは、インスタンスやクラス、ハンドル等アプリケーション固有の物
を監視すれば可能ですが、その後起動されないようにするというのはかなり難しい
です。1つ目はそのままで、新しい方を強制終了させるとなると、変なタイミング
で強制終了しても厄介なことになったりするので...できれば起動されるアプリ
側に上記の仕掛けを入れるほうが...
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-09-09 15:58
こんにちは。

こんなスレッドがあったりします。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3559&forum=7
shinovi
常連さん
会議室デビュー日: 2003/06/24
投稿数: 23
投稿日時: 2003-09-09 16:03
PoHさん、Beatleさん
早速のレスありがとうございます。

言い忘れていましたが
言語はC#を使用しています。

>If (UBound(Diagnostics.Process.GetProcessesByName _
>(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0) = True Then
>Exit Sub
>End If

C#では“UBound”という関数が使えないようなのですが
どうしたらいいのでしょうか?
shinovi
常連さん
会議室デビュー日: 2003/06/24
投稿数: 23
投稿日時: 2003-09-09 16:09
Jittaさんありがとうございます。

早速見てみましたが
こちらもVBですネ...

しかもちょっと私には理解が苦しみます...
素人の私には難しいです。
PoH
常連さん
会議室デビュー日: 2003/09/09
投稿数: 48
投稿日時: 2003-09-09 16:30
Jittaさんのレスも難しく見えてすごく分かり易く
書いてくださっているので
焦らずゆっくり読んで見てください。

ちなみにC#ということですが、
VB.NETのコード書いてしまい申し訳ないです。
出来れば最初に環境等を書いておいていただけるとありがたいです。

C#では・・・
コード:
if (System.Diagnostics.Process.GetProcessesByName(
    System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length > 1)
{
    MessageBox.Show("2重起動です");
    Application.Exit();
}


でいけるでしょうか?

JittaさんBeatleさんのでいえば
コード:
System.Threading.Mutex m = new System.Threading.Mutex(false, "MyName");
if (m.WaitOne(0, false) == false)
{
    MessageBox.Show("2重起動です");
    Application.Exit();
}



てなところで、いかがでしょうか?
shinovi
常連さん
会議室デビュー日: 2003/06/24
投稿数: 23
投稿日時: 2003-09-09 16:47
PoHさんありがとうございます。

早速やってみました
ばっちりうまくいきました!!
C#のコードを見てやっと
なるほど!と思いました。

本当に助かりました。

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