- - PR -
C#2003で別Exeを起動したときのカレントフォルダについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-19 10:53
C#2003でA.ExeからB.Exeを起動しようと思っています B.Exeは、 Process.Start(@"c:\B.exe"); を使ってB.exeを起動します B.Exeのコード内には、「Directory.GetCurrentDirectory()」の コードが複数個所存在しています B.Exeを直接起動した場合、Directory.GetCurrentDirectory()の戻り値は、 B.Exeのカレントフォルダになるのですが、 A.Exeから、Process.Start(@"c:\B.exe");を使用して、B.Exeを起動した場合、 B.Exeのカレントフォルダが、A.Exeのカレントフォルダになってしまいます どーなっているんでしょうか?? 出来ることなら、B.Exeは運用されていますので、A.Exeでどうにかしたいのですが。。 御教授宜しくお願いします | ||||||||
|
投稿日時: 2007-01-19 11:09
それはそういうものだと思います。 B.exe を直接起動したときは、エクスプローラが B.exe の存在するディレクトリにカレ ントディレクトリを移動させてから B.exe を起動しているのでしょう。 B.exe を変更したくないとすれば、A.exe 側で B.exe のディレクトリ(例で言うと C:\ ) にカレントディレクトリを移動してから B.exe を起動してあげればいいと思います。 そもそもカレントディレクトリに依存するようなプログラムを書くなという話ではありますが、 そのあたりは現状がそうなってしまっている(過去の負の遺産?)ので仕方がないという 感じでしょうか。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||
|
投稿日時: 2007-01-19 11:15
ProcessStartInfoで設定できた気がします。
たしかWorkingDirectoryだったかな。。。(自信なし) | ||||||||
|
投稿日時: 2007-01-19 11:25
A.EXEの環境をB.EXEが引き継いでいるだけです。今まではたまたまB.EXEのカレントフォルダが、B.EXEを置いてあるフォルダになっていただけです。一部のAPIではカレントフォルダが移動してしまう場合もありますし、カレントフォルダが実行ファイルの置かれているフォルダと考えてコーディングするのは危険です。
B.EXEを起動する前にA.EXE内でカレントフォルダを移動するか、StartInfoで作業フォルダを明示的にしていすれば良いはずです。 _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ | ||||||||
|
投稿日時: 2007-01-19 11:29
Process p=new Process();
p.StartInfo.FileName=B.exeのフルパス; p.StartInfo.WorkingDirectory=B.exeのカレントディレクトリフォルダ; p.Start(); で問題なく動作しました 素早い御教授ありがとうございました | ||||||||
|
投稿日時: 2007-01-19 23:03
「B.exeのカレントディレクトリフォルダ」なんて書いているあたり、そういう問題じゃないと思う。current って、辞書引いてみた?
こういう問題だと思う。 OpenFileDialog を出したりすると変わってしまうのに。。。 あと、B.exe の方が、Assembly.GetExecutionAssembly で、「実行中のアセンブリのフルパス」を取って、そこからディレクトリを割り出すべきかと。 _________________ |
1