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

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

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

Re[2]: 別アセンブリで、INIファイルの情報を共有する


(過去ログ 11 を表示中)

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

■2671 / inTopicNo.1)  別アセンブリで、INIファイルの情報を共有する
  
□投稿者/ 商人 (4回)-(2007/04/13(Fri) 12:05:05)

分類:[.NET 全般] 

商人です。

Aアセンブリがメニューで、そこからBアセンブリ、Cアセンブリ・・
と別々のExEを実行したいです。

.NETに共有メモリのようなものがないでしょうか?
INIファイルの情報を共有したいです。

アプリケーションドメインは使えませんでしょうか?

追伸:
下記の質問に対して、回答してくださりありがとうございます。
スレッドが流れるのが早いですね・・・

●非同期にしたいので、別AppDomainにする

Kazuki さん
囚人 さん
HiJun さん

●クラスライブラリのほとんどがアンマネージド?を勉強するには

επιστημηさん
中博俊さん


引用返信 編集キー/
■2672 / inTopicNo.2)  Re[1]: 別アセンブリで、INIファイルの情報を共有する
□投稿者/ はつね (131回)-(2007/04/13(Fri) 12:14:01)
はつね さんの Web サイト
2007/04/13(Fri) 12:15:01 編集(投稿者)

No2671 (商人 さん) に返信
> Aアセンブリがメニューで、そこからBアセンブリ、Cアセンブリ・・
> と別々のExEを実行したいです。
>
> .NETに共有メモリのようなものがないでしょうか?
> INIファイルの情報を共有したいです。

もしINIファイルだということであれば、それぞれでINIファイルを読み込んだ方がいいのでは?
それぞれのEXEを直接起動したときにも同じ流れになりますし、個別にテストするときにも楽だと思います。

引用返信 編集キー/
■2675 / inTopicNo.3)  Re[1]: 別アセンブリで、INIファイルの情報を共有する
□投稿者/ 渋木宏明(ひどり) (173回)-(2007/04/13(Fri) 12:39:46)
渋木宏明(ひどり) さんの Web サイト
> .NETに共有メモリのようなものがないでしょうか?

無いです。

> アプリケーションドメインは使えませんでしょうか?

使えません。
プロセス間で AppDomain を共有するようなことは出来ません。

引用返信 編集キー/
■2677 / inTopicNo.4)  Re[1]: 別アセンブリで、INIファイルの情報を共有する
□投稿者/ よねKEN (34回)-(2007/04/13(Fri) 12:53:05)
よねKEN さんの Web サイト
> Aアセンブリがメニューで、そこからBアセンブリ、Cアセンブリ・・
> と別々のExEを実行したいです。

どのようにB、Cを実行するのでしょうか?
アセンブリをロードして、CreateInstanceでインスタンス生成するような方法で実行していれば、
AアセンブリからBアセンブリのクラスの生成したインスタンスにINIファイルの情報を渡せばよいかと思います。

B、CをProcessクラスで起動するのであれば、コマンドライン引数を使うとか。
#文字列の長さが問題になるでしょうから、この方法はボツでしょうね・・・

それぞれのアセンブリがそのINIファイルを読むというのは、
お手軽でいいのですが、INIファイルを修正された場合に
想定外の動作をさせることが可能になるのでよろしくないと思います。


引用返信 編集キー/
■2680 / inTopicNo.5)  Re[2]: 別アセンブリで、INIファイルの情報を共有する
□投稿者/ 商人 (5回)-(2007/04/13(Fri) 13:07:48)
はつね さん、

こんにちは、商人です。

はつね さんのおっしゃるとおりなのですが、
技術的に可能性調べておきたかったというのもあります。

> もしINIファイルだということであれば、それぞれでINIファイルを読み込んだ方がいいのでは?
> それぞれのEXEを直接起動したときにも同じ流れになりますし、個別にテストするときにも楽だと思います。

引用返信 編集キー/
■2681 / inTopicNo.6)  Re[2]: 別アセンブリで、INIファイルの情報を共有する
□投稿者/ 商人 (6回)-(2007/04/13(Fri) 13:14:40)
よねKEN さん

こんにちは、商人です。

> どのようにB、Cを実行するのでしょうか?
> AアセンブリからBアセンブリのクラスの生成したインスタンスにINIファイルの情報を渡せばよいかと思います。

Processクラスなら戻り値を見れるので、Processのつもりでしたが、
CreateInstanceで起動すれば、渡せそうですね。
CreateInstanceも検討します、まだ製造に入ってないんで。

基本的にINIファイルは、行志向のデータ配列になっていてつまり、
A=データ1 データ2、とかスペースとか入る場合を考慮すると、
コマンドライン引数はめんどくさいかなと思います。

あと、INIファイルは業務アプリ開発標準(笑い) でして、
どうしようもないですね。

引用返信 編集キー/
■2683 / inTopicNo.7)  Re[2]: 別アセンブリで、INIファイルの情報を共有する
□投稿者/ 商人 (7回)-(2007/04/13(Fri) 13:18:11)
ひどり さん

こんにちは、商人です。

> 使えません。
> プロセス間で AppDomain を共有するようなことは出来ません。
>

ちょっと前に、@ITの掲示板に、AppDomain か何かに、
Addすることによって、共有させようと記述を見かけたのですが。

すいません、私の勘違いですかね・・

引用返信 編集キー/
■2687 / inTopicNo.8)  Re[2]: 別アセンブリで、INIファイルの情報を共有する
□投稿者/ はつね (132回)-(2007/04/13(Fri) 13:41:18)
はつね さんの Web サイト
No2677 (よねKEN さん) に返信
> それぞれのアセンブリがそのINIファイルを読むというのは、
> お手軽でいいのですが、INIファイルを修正された場合に
> 想定外の動作をさせることが可能になるのでよろしくないと思います。

頻繁に修正されるようなものはINIファイルには適さないというのが根底にあったりしますが、言葉足らずでしたね。
引用返信 編集キー/
■2700 / inTopicNo.9)  Re[3]: 別アセンブリで、INIファイルの情報を共有する
□投稿者/ 渋木宏明(ひどり) (178回)-(2007/04/13(Fri) 14:41:23)
渋木宏明(ひどり) さんの Web サイト
> ちょっと前に、@ITの掲示板に、AppDomain か何かに、
> Addすることによって、共有させようと記述を見かけたのですが。

AppDomain に関してはあり得ない話です。

そもそも、何で「共有」しなければいけないんでしょう?

既にコメントが付いているように、個々の exe で読み込めばいいんじゃないですか?
工数かけて「共有」しなければならない理由が良く分かりません。

.ini の変更を検知したいとかいう要件があるならまた話は別ですが、そんな話は1度も出てきてないですし。



引用返信 編集キー/
■2703 / inTopicNo.10)  Re[4]: 別アセンブリで、INIファイルの情報を共有する
□投稿者/ 商人 (9回)-(2007/04/13(Fri) 14:54:17)
> そもそも、何で「共有」しなければいけないんでしょう?

現在の仕様で決まっていることが、
1.「A.EXEから、B.EXEを起動すること」
2.「二つのExeはそれぞれ別会社で作成する」
3.「AからBにデータを受け渡す仕様が発生する可能性を考慮する」
4.「業務仕様の設定ファイルはInIファイルで、ファイル名も決まっている」


> .ini の変更を検知したいとかいう要件があるならまた話は別ですが、そんな話は1度も出てきてないですし。

そうですね、画面を終了しないで、Iniを変更した場合に反映される必要があります。
やっぱり各画面の初期処理で読むべきでしょうかね。
引用返信 編集キー/
■2705 / inTopicNo.11)  Re[4]: 別アセンブリで、INIファイルの情報を共有する
□投稿者/ 商人 (10回)-(2007/04/13(Fri) 15:06:37)
> そもそも、何で「共有」しなければいけないんでしょう?
>

つまりですね、A.EXEを弊社が作成し、B.EXEを他社が作成します。
A.EXEで発生した、ステータスorデータなどの情報を、B.EXEに渡したいときに、
B.EXEを「なるべく変更しないで」対応したいんです。「なるべく変更しないで」です。
これをシステムでなんとかしたいんです。

例えば、値をハッシュで参照するだけなら簡単なのでいいのですが、
ロジック(フロー)ですね。「もし、○○なら●●だ」ということを、
追加すると、テスト工数が必要なので、そういうものを抑えたいんです。

引用返信 編集キー/
■2717 / inTopicNo.12)  Re[5]: 別アセンブリで、INIファイルの情報を共有する
□投稿者/ 渋木宏明(ひどり) (179回)-(2007/04/13(Fri) 17:13:47)
渋木宏明(ひどり) さんの Web サイト
>>.ini の変更を検知したいとかいう要件があるならまた話は別ですが、そんな話は1度も出てきてないですし。
>
> そうですね、画面を終了しないで、Iniを変更した場合に反映される必要があります。

仮に .ini を扱う Windows API を使ったとしても、単純な読み書きしか出来ないわけで、それ以上のことをやろうとするなら自分で工夫しないと出来ないですね。

> やっぱり各画面の初期処理で読むべきでしょうかね。

単純な変更だけなら、.ini ファイルの変更を監視するなどして .ini を読み直すという手はあると思います

ですが、それ以上細かいことしようと思ったら、.ini なんか使わない方が簡単でしょう。

>A.EXEで発生した、ステータスorデータなどの情報を、B.EXEに渡したいときに、
>B.EXEを「なるべく変更しないで」対応したいんです。「なるべく変更しないで」です。
>これをシステムでなんとかしたいんです。

まぁ、普通 .ini ではやらないですね。

.ini は「設定を読み書きする」目的で作られたものであって、アプリケーション間通信に使用することは想定されていません。

上でも書きましたが、「読み直し」以上は厳しいと思いますよ。


引用返信 編集キー/
■2727 / inTopicNo.13)  Re[5]: 別アセンブリで、INIファイルの情報を共有する
□投稿者/ はつね (133回)-(2007/04/13(Fri) 20:23:51)
はつね さんの Web サイト
No2703 (商人 さん) に返信
> 3.「AからBにデータを受け渡す仕様が発生する可能性を考慮する」
> 4.「業務仕様の設定ファイルはInIファイルで、ファイル名も決まっている」

設定ファイルであって、データを受け渡すデータファイルとしてINIファイルを使う事が決まっている訳ではないという事ですね。
設定ファイルとEXE間のデータファイルを一緒くたにしているために訳分からない事になりかけていると思います。

もし、A.exeとB.exeの間で頻繁にデータのやりとりが発生するのであれば、密に結合しているロジックに相当しますので何のデータ連携機構を提供せずに別々の会社に発注する事は通常しません(というか、何も考えずにいると確実に破綻します)。
ここでいうデータ連携機構とは、INIファイルなどではなくプログラム間通信であるとかDBなどを介したものです。

もし、それほど密に連携するものでないとしたら、A.EXEで編集したものをB.EXEで読み込みたいとかそういった類のものになります。これであらば、その読込むファイルのフォーマットを規定すれば別々の会社に発注したとしても上手く構築できる可能性があります。でも、この場合、発注元できちっとフォーマットを規定するなど主導的に仕様を検討・決定していかないとなかなか上手くいきません(どちらか一方の会社に主導的立場と権限を与えるのも手ですが)。
この場合、少量のデータのやりとりであればINIファイルというのもありかも知れませんが、.NETならばSystem.Data.Dataset使ってその中身をXMLファイルとしてやりとりした方が楽かと思います。

今回解決したいのは、前者と後者のどちらのパターンなのでしょうか。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -