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

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

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

同一アプリ複数起動時の制御について

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

■84822 / inTopicNo.1)  同一アプリ複数起動時の制御について
  
□投稿者/ たま (14回)-(2017/08/04(Fri) 16:31:28)

分類:[C#] 

いつもお世話になっております。
今回も皆さんのお知恵を拝借したく投稿させて頂きました。

現在、あるアプリHogeを起動後、Hoge内にあるボタンを押下することにより、同じHogeを複数起動し(最大3つ))、
制御することを目的として作業をしています。

以下に記載するようなことが可能なのか、また可能であればどのようにすれば実現できるかが、まったく見えておりません。
ご教授いただけると幸いです。

[やりたいこと]
1.Hoge内のボタン押下により、同じHogeを複数起動する。(※こちらは、”System.Diagnostics.Process.Start"を使用して可能なことがわかりました)
  ※複数起動するアプリHogeは、同一のパスにあるアプリを起動したいと考えています。
2.起動する際は、起動元のアプリHogeから起動先のアプリHogeへデータを引数として受け渡す。
3.起動元アプリHogeでボタン(Hoge起動とは別のボタン)を押下すると、起動先のアプリHogeでも同じボタンを押下するイベントを発生させる。

[不明なこと]
1.起動元アプリHogeで起動先アプリHogeに対して受け渡すために、”System.Diagnostics.Process.Start。Arguments”に設定した
  引数を、起動先アプリHogeでどのようにコーディングすれば受け取れるかがわかりません。
2.引数の受け渡しが成功した後、起動元のアプリHogeで別のボタンを押下した際に、起動先アプリHogeでも同じボタンの押下イベントを発声させる方法が
  わかりません。

[複数起動するアプリの関係]
起動元のアプリは1つ(最初に起動したHoge)のみとし、2つ目以降に起動したHogeからは、別のHogeを起動できない。
※これは、起動されている同一アプリのプロセス数を元に、自身が起動される際、既にひとつ以上のHogeが起動されていたら、別のHogeを起動するためのボタンを押下できなく
  する形で対応したいと考えています。
  <具体例>
     最初に起動するHogeをHoge_Aとすると、Hoge_AからはHoge_B、Hoge_Cを起動できるが、Hoge_BからHoge_Cを起動することはできない

色々と調べて、サーバー・クライアントにアプリを分け制御する方法などがあることはわかりましたが、よく理解できませんでした。
※あくまでも1つのアプリ内で、起動された際に処理を切り替えて制御することを考えているため、イメージとして上記のやり方はアプリを2つ用意しなければいけないように思え、
 今回私のやりたいことに合致していない気がしています。

[開発環境]
OS:Windows7
Tool:Visual Studio 2017
言語:C#

宜しくお願いいたします。
引用返信 編集キー/
■84824 / inTopicNo.2)  Re[1]: 同一アプリ複数起動時の制御について
□投稿者/ shu (1048回)-(2017/08/04(Fri) 16:49:59)
No84822 (たま さん) に返信

ボタンを押されたときにプロセス起動を行う必要があるのでしょうか?
起動した後、起動元の操作に連動して起動先のプロセスに影響を与える動作は
出来なくはないですが手間がかかります。
ボタンがあるということはフォームを表示しているのだと思いますが、同じフォームの
インスタンスを新たに作るようにした方が連動は行いやすいと思います。

検索されて見つけた内容はプロセス間通信に関するものだと思いますが、プロセスを
分けるという事は基本的に管理するメモリを分けることになるのでそのような内容が
多く出てきたものと考えられます。
引用返信 編集キー/
■84829 / inTopicNo.3)  Re[2]: 同一アプリ複数起動時の制御について
□投稿者/ たま (15回)-(2017/08/05(Sat) 21:27:13)
shuさん

返信が遅くなってしまい申し訳ありません。
回答ありがとうございます。

インスタンスを作成することで、同じアプリを起動しデータを受け渡すことが出来ました。

>起動した後、起動元の操作に連動して起動先のプロセスに影響を与える動作は
>出来なくはないですが手間がかかります。
上記に関して、私なりに調査をしてみましたが、皆目見当つきませんでした。
もし、お分かりになりましたら、どのようにすれば実現できるかご教授頂けると助かります。

重ね重ね申し訳ありません。
宜しくお願い致します。
引用返信 編集キー/
■84830 / inTopicNo.4)  Re[3]: 同一アプリ複数起動時の制御について
□投稿者/ Azulean (845回)-(2017/08/06(Sun) 00:41:10)
2017/08/06(Sun) 08:09:36 編集(投稿者)

No84829 (たま さん) に返信
> 上記に関して、私なりに調査をしてみましたが、皆目見当つきませんでした。
> もし、お分かりになりましたら、どのようにすれば実現できるかご教授頂けると助かります。

WCF を使うとか。
http://programmers.high-way.info/cs/wcf-ipc.html


コマンドライン引数を渡すだけで、細かな同期をしない前提に戻って良い& VisualBasic 名前空間を使うことに抵抗がないなら、WindowsFormsApplicationBase を使うとか。
http://anis774.net/codevault/singleinstanceargs.html

古典的な方法としては独自のウィンドウメッセージ(文字列をコピーするなどの場合は WM_COPYDATA となる)やメモリマップドファイルあたりも考えられますかね。
引用返信 編集キー/
■84837 / inTopicNo.5)  Re[4]: 同一アプリ複数起動時の制御について
□投稿者/ たま (16回)-(2017/08/07(Mon) 16:08:22)
No84830 (Azulean さん) に返信
Azuleanさん
ご回答ありがとうございます。
返信が遅くなりがちですみません。

通信関連のことについて、全くの素人でわからないため、初心者の質問をしてしまい申し訳ないのですが、
ご回答いただけると幸いです。

> WCF を使うとか。
> http://programmers.high-way.info/cs/wcf-ipc.html
こちらの方法を使った場合、作成しているアプリとしては、2つのプロジェクトを作成し、別々のアプリとして
管理しなければならない様に感じたのですが、合っていますでしょうか?
私としては、できるなら1つのアプリで複数のインスタンスを再生した後、一番最初に起動したアプリから、
後からインスタンス生成で起動したアプリに対して、メッセージなりを送信して連携を取りたいと考えています。
イメージとしては、
複数の測定器(同じ機種)を一対一でアプリと接続し、最初に起動したアプリで測定開始ボタンを押下した時に、インスタンス生成された別アプリがいた場合、にそれらのアプリでも連動して測定を開始する動作をさせたいです。

ご回答頂けると幸いです。
宜しくお願い致します。

引用返信 編集キー/
■84840 / inTopicNo.6)  Re[5]: 同一アプリ複数起動時の制御について
□投稿者/ furu (115回)-(2017/08/07(Mon) 16:47:42)
No84837 (たま さん) に返信
> こちらの方法を使った場合、作成しているアプリとしては、2つのプロジェクトを作成し、別々のアプリとして
マスターとスレーブ,サーバーとクライアントの両方の機能を
2つのアプリ別々にするか、1つのアプリに両方入れるかの違いのような気がする。
引用返信 編集キー/
■84843 / inTopicNo.7)  Re[5]: 同一アプリ複数起動時の制御について
□投稿者/ Azulean (847回)-(2017/08/07(Mon) 21:35:50)
2017/08/07(Mon) 21:37:10 編集(投稿者)

No84837 (たま さん) に返信
> こちらの方法を使った場合、作成しているアプリとしては、2つのプロジェクトを作成し、別々のアプリとして
> 管理しなければならない様に感じたのですが、合っていますでしょうか?

そうでもあるし、そうでもありません。
それは作る側が決めることなので。

示した URL のサンプルは、サーバーとクライアントに分かれているのでプロジェクトを分けているだけなので、応用すれば1アプリでサーバーとクライアントを実現できるでしょう。

// どうすれば良いかはサンプルを触り込んだり、改造したりして自分で編み出しましょう。
引用返信 編集キー/

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


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

このトピックに書きこむ