DOBON.NET DOBON.NETプログラミング掲示板過去ログ

.exe以外を起動

  • 題名: .exe以外を起動
  • 著者: しらいわ
  • 日時: 2010/05/08 21:18:01
  • ID: 26791
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[OS:Windows XP / 言語 : C# / .NET Framework2.0]
2010/05/08(Sat) 21:22:19 編集(投稿者)

お世話になっております。

AとBのモジュールを作成して
Aを起動後に必要な処理を行い、Bを起動。
Aを停止。以後Bで処理を行う。
というプログラムを作成しようと思っております。

ただし、Bを直接起動しないようにしたいので
起動時引数がない場合、Bを終了する様にしたのですが
それだけでは少し弱いと思い、
Aのみを.exeとして作りBを.dllで作成しようと思うのですが
当然、System.Diagnostics.Process.Start()では起動出来ません。

なにか方法はありますでしょうか?
ご教授よろしくお願いいたします。

※分類の部分が何故か消えてしまっていますが「.NET」です
2010/05/10(Mon) 09:49:06 編集(投稿者)

■No26791に返信(しらいわさんの記事)
> ただし、Bを直接起動しないようにしたいので
> 起動時引数がない場合、Bを終了する様にしたのですが

起動時引数というのは、Environment.GetCommandLineArgs() や
Main メソッド引数で得られるコマンドライン引数の事でしょうか?

コマンドライン以外でデータを渡す方法が必要なのであれば、
.NET Remoting を用いて、B が A に対してデータ内容を
問い合わせるようにしてみるというのは如何でしょう。
(または B から問い合わせるのではなく、A が B にデータを送りつけるとか)

でもって、A と通信できない場合や、A からデータを渡されなかった場合には
B は自身を終了させようにしてみるとか。


> それだけでは少し弱いと思い、

具体的には、どのような点が弱いと感じておられるのでしょうか?


> Aのみを.exeとして作りBを.dllで作成しようと思うのですが
> 当然、System.Diagnostics.Process.Start()では起動出来ません。

DLL の場合には、Process.Start ではなく、クラス等のオブジェクトとして
呼び出してみてください。

たとえば MessageBox を表示する場合、System.Windows.Forms.dll を
参照設定した上で、以下のように記述しているかと思います。
 // using System.Windows.Forms;
 MessageBox.Show("メッセージ");
あるいは、TextBox クラスを Form 上に生成する場合、
 // using System.Windows.Forms;
 TextBox textBox1 = new TextBox();
 textBox1.Text = "Text";
 this.Controls.Add(textBox1);
などとします。

これらは自作の DLL であっても同様です。すなわち、参照設定した上で
その中の public なクラスを呼び出すようにしてみてください。
2010/05/10(Mon) 19:46:07 編集(投稿者)

魔界の仮面弁士 様

ご返答ありがとうございます
説明不足で申し訳ありません

>起動時引数というのは、Environment.GetCommandLineArgs() や
>Main メソッド引数で得られるコマンドライン引数の事でしょうか?
はい、その引数です。

>具体的には、どのような点が弱いと感じておられるのでしょうか?
コマンドラインもしくはショートカットから引数を渡されて起動されるのでは。
と危惧しています。
勿論、起動時に必要な引数は複雑な物にしようとは思っていますが

>DLL の場合には、Process.Start ではなく、
>クラス等のオブジェクトとして呼び出してみてください。
その場合Aが作ったインスタンスとして呼び出されるのでは無いでしょうか?
Aを終了させて、Bだけを動かしていたいのです。
そしてBからの単独起動をさせないようにEXE以外の形にしようと思うのですが……

なにか良い方法がないかな。とココでお聞きした次第です。
■No26793に返信(しらいわさんの記事)
> なにか良い方法がないかな。とココでお聞きした次第です。

それに対して、".NET Remoting" という回答をしたかと思いますが、
これも何か問題があったのでしょうか?


> >具体的には、どのような点が弱いと感じておられるのでしょうか?
> コマンドラインもしくはショートカットから引数を渡されて起動されるのでは。
> と危惧しています。

そのようにして手動起動された場合において、それによって
どのような事態が発生する事を危惧されているのでしょうか?
  • 題名: Re[4]: .exe以外を起動
  • 著者: しらいわ
  • 日時: 2010/05/10 21:48:53
  • ID: 26796
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
魔界の仮面弁士 様

ご返答ありがとうございます

>それに対して、".NET Remoting" という回答をしたかと思いますが、
>これも何か問題があったのでしょうか?

すいません。
>コマンドライン以外でデータを渡す方法が必要なのであれば、
この部分を勘違いして、コマンドラインと同等の物だと思っておりました

調べて見た所、この方法ならB単独の起動を阻止出来そうですので
この方法で行こうと思います。ありがとうございました。

>そのようにして手動起動された場合において、それによって
>どのような事態が発生する事を危惧されているのでしょうか?
Aで行われるべき処理が行われないまま、Bが起動されると
その後の動作で不具合が起きる可能性があるので、
Bの単独起動を阻止しようと思っております。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板