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

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

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

二重起動を防ぐ方法

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

■87679 / inTopicNo.1)  二重起動を防ぐ方法
  
□投稿者/ NNN (1回)-(2018/06/19(Tue) 21:47:12)

分類:[.NET 全般] 

プログラムの二重起動を防止したいのですが

https://lightz.info/index.php/view/42?continue=1

このページを参考にして、
.[単一インスタンスのアプリケーションを作成する(M)] にチェックを入れてみました。
すると、このチェックを入れたプログラムは異なるプログラムであっても
同時起動できなくなりました。
同じプログラムは二重起動防止したいのですが
異なるプログラムは同時に起動する必要があります。

これは、Visual Studioの仕様上、どうしようもないことなのでしょうか?
他の方法を使うしかありませんか?


引用返信 編集キー/
■87680 / inTopicNo.2)  Re[1]: 二重起動を防ぐ方法
□投稿者/ 774RR (611回)-(2018/06/20(Wed) 06:25:26)
「同じ」と「異なる」とはどういう基準で決めているのかわからないんだが要説明。

引用返信 編集キー/
■87681 / inTopicNo.3)  Re[1]: 二重起動を防ぐ方法
□投稿者/ Azulean (960回)-(2018/06/20(Wed) 06:35:25)
No87679 (NNN さん) に返信
> すると、このチェックを入れたプログラムは異なるプログラムであっても
> 同時起動できなくなりました。
> 同じプログラムは二重起動防止したいのですが
> 異なるプログラムは同時に起動する必要があります。

その「異なるプログラム」は、ソースコード一式をコピーして作っていませんか?
多重起動かどうかの判定には、プロジェクトのプロパティのアセンブリ情報ボタンで表示される「GUID」と「アセンブリバージョン」が使用されているようです。
ソースコードをコピーして作成すると、これらの値が一致してしまうので、別々のプログラムでも「同一」とみなされます。

コピーして別のプログラムを作ることは避けてください。
現状からの回避であれば、GUID 生成ツールを利用して新しい GUID を生成し、アセンブリ情報の GUID を変更してください。

一例
https://hogehoge.tk/guid/

引用返信 編集キー/
■87683 / inTopicNo.4)  Re[2]: 二重起動を防ぐ方法
□投稿者/ NNN (3回)-(2018/06/20(Wed) 09:22:33)
ありがとうございます。

仰る通り、ソースコード一式をコピーして作っています。

GUIDに関してですが
自分でランダム関数を使って適当に生成したものを使用しても良いでしょうか?
何か決まった法則性のものが使用されていますか?

引用返信 編集キー/
■87684 / inTopicNo.5)  Re[3]: 二重起動を防ぐ方法
□投稿者/ Hongliang (650回)-(2018/06/20(Wed) 09:36:48)
> 自分でランダム関数を使って適当に生成したものを使用しても良いでしょうか?
> 何か決まった法則性のものが使用されていますか?
「自分でランダム関数を使って」は推奨されません。
Visual Studioのメニュー>ツールにある「GUIDの作成」を使うなどして生成してください。
// プログラムから作るならSystem.GuidクラスのNewGuidメソッドがありますが、今回の用途でわざわざ使うこともないでしょう。

そういうもので生成されたGUIDであれば、任意のものを使用して問題ありません。
引用返信 編集キー/
■87690 / inTopicNo.6)  Re[4]: 二重起動を防ぐ方法
□投稿者/ ぶなっぷ (183回)-(2018/06/20(Wed) 15:08:21)
私も、最初、訳がわからなかったので、簡単に解説しましょう。

GUIDはソフトウェア上でとにかくなんでもユニーク(一意)に区別するためのキーです。
と書くと、難しそうですが、何のことはない、以下の値を参照して計算により作られる値です。
 1) 現在時刻(100ナノ秒単位)
 2) ネットワークカードのMACアドレス
 ※ バージョン違いなどで、変わってくるため、正確に上記のものだけというわけではない
    詳細は以下のHPを参照
    https://ja.wikipedia.org/wiki/UUID (GUIDはマイクロソフト流のUUIDのこと)

Hongliangさんのおっしゃっている方法で、そのようにして計算された、GUIDを取得できます。
1), 2)両方の条件が完全一致する状況は非常に限定されるため、擬似的にユニークキーと見なして良いということです。

引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ