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

.exeファイルのディレクトリ、DoubleClickで起動したファイルのパス

環境/言語:[win xp, .NetFramework 1.1]
分類:[.NET]

お世話になります。
インストーラでインストールし、拡張子に関連付けたファイルをダブルクリックして起動したとき、
1.起動した.exeファイル自身のパス(つまり、.exeファイルが起動したとき、自動的にそのファイルがどこにあるのか知りたい)
2.DoubleClickしたファイルのパス (or ファイル名)
を取得する方法について、どなたかご指導いただけませんでしょうか?

DoubleClickしたときのファイルのあるフォルダ(または.exeファイルをDoubleClickして起動したときの.exeファイルの場所)は
System.IO.Directory.GetCurrentDirectory
で取得できるということは分かったのですが、ヘルプを見てもどう絞り込んでいけば知りたい内容にたどり着けるか分からず、こちらに質問させていただきました。
よろしくお願いいたします。
Application.StartupPath とかで取得できないですか?
2004/07/11(Sun) 03:56:23 編集(投稿者)

Ken-koさん、こんにちは。
exeのフルパスを取得するには?って事でしょうか?
VB.NETであれば、
Application.StartupPath & "\" & Application.ProductName & ".exe"
となります。
見当違いなら申し訳ありません。
> 2.DoubleClickしたファイルのパス (or ファイル名)
ファイルのパスは、コマンドライン引数としてexeに渡されるので、
Environment.GetCommandLineArgs()
で取得できると思います。
Ken-koです。みなさんありがとうございました。
とりあえず、
1.起動した.exeファイル自身のパス(つまり、.exeファイルが起動したとき、自動的にそのファイルがどこにあるのか知りたい)

については解決いたしました。
で、

> ファイルのパスは、コマンドライン引数としてexeに渡されるので、
> Environment.GetCommandLineArgs()
> で取得できると思います。

なのですが。
やってみたところ、インストールされている .exe ファイルのパスが表示されてしまいました...。
コードは以下のようなものです。

Dim strTest() As String
strTest = Environment.GetCommandLineArgs
MessageBox.Show(strTest(0))

いきなり
MessageBox.Show(Environment.GetCommandLineArgs) とすると、
G:\Personal\VBAnki\Software\New\VBAnki\frmLogin.vb(246): 型 'String の 1 次元配列' の値を 'String' に変換できません。

というエラーが表示されてしまいました。
MessageBox.Show(Environment.GetCommandLineArgs.tostring)
とすると、
System.String[]
と出たので、とりあえず配列の要素を Messagebox.show してみたのですが...。
もうすこしご指導お願いいたします。
追加です。

Dim strTest() As String
strTest = Environment.GetCommandLineArgs
MessageBox.Show(strTest(0))

の話は、「関連付けられているファイルをダブルクリックしたときに」です。
よろしくお願いいたします。
>>ファイルのパスは、コマンドライン引数としてexeに渡されるので、
>>Environment.GetCommandLineArgs()
>>で取得できると思います。
>
> なのですが。
> やってみたところ、インストールされている .exe ファイルのパスが表示されてしまいました...。
> コードは以下のようなものです。
>
> Dim strTest() As String
> strTest = Environment.GetCommandLineArgs
> MessageBox.Show(strTest(0))
>
> いきなり
> MessageBox.Show(Environment.GetCommandLineArgs) とすると、
> G:\Personal\VBAnki\Software\New\VBAnki\frmLogin.vb(246): 型 'String の 1 次元配列' の値を 'String' に変換できません。
>
> というエラーが表示されてしまいました。
> MessageBox.Show(Environment.GetCommandLineArgs.tostring)
> とすると、
> System.String[]
> と出たので、とりあえず配列の要素を Messagebox.show してみたのですが...。
> もうすこしご指導お願いいたします。

GetCommandLineArgsをヘルプで調べてみましょう。
私のサイトも参考にしてください。

DOBON.NET .NET Tips - 起動時のコマンドライン引数を取得する
http://dobon.net/vb/dotnet/programing/commandline.html
おはようございます。

NowhereManさん、管理人さん、ありがとうございました。
とりあえず解決した...かのような気がします。

ただ、まだ良く分からないことがあります。
よろしければ、もう少しおつきあいください

Google で「コマンドライン引数」、「コマンドライン引数 vb.net」で検索してみる、
Environment.CommandLineプロパティのヘルプを読んでみるなどしましたのですが、
コマンドライン引数の配列のそれぞれの要素が何を表しているのか分かりません。

つまり、管理人さんのサンプルに
'出力例
'"C:\VB TEST\VB.exe" "C:\VB TEST\1.bmp" "C:\VB TEST\2.bmp" "C:\VB TEST\3.bmp"
'C:\VB TEST\VB.exe
'C:\VB TEST\1.bmp
'C:\VB TEST\2.bmp
'C:\VB TEST\3.bmp
とありますが、2番目から4番目が何を指しているものなのか分かりません...。
(最初のものは .exe ファイルだろうとは思うのですが)
DoubleClickしたファイルのパスがどうして2番目に出てくるのかもいまいち分かりません...。

コマンドライン引数の配列の中身にはどのようなものが来る可能性があるかなど、
教えていただく or 記載のあるURLなど教えていただけるとありがたいです。

お世話になってばかりで申し訳ありませんが、
どうかよろしくお願いいたします。
管理人さんのおかげで、先ほど問題が解決しました。
ありがとうございます、、、というのは、本件と関係ありませんが、
お礼代わり?に、わかるものがあったので回答です。

かなり冗長になり、ご存知なことも多いかもしれませんが、最初から。

Windowsのような画面ができる前までは、コンピュータの画面で
できることは、文字を表示することのみでした。
(今でもコマンドプロンプト、というものがWindowsにもありますが、
 それが全画面で起動している状態です。マウスはありません。)
そのため、「c:\windows」にある「notepad.exe」を実行したい場合は、
キーボードから「c:\windows\notepad.exe」と入力していました。

そして、その「notepad.exe」で「c:\hoge」にある「hoge.txt」を
開きたい場合は、「c:\windows\notepad.exe c:\hoge\hoge.txt」と
入力していました。(これで、hoge.txtの中が見える!)
これが、コマンドラインと呼ばれる形態です。
ここまでが、古い(とは言え、今にもつながる)お話。

時は流れて現在。
エクスプローラが登場しました。
エクスプローラで「c:\hoge」を開くと「hoge.txt」が見えて、
「hoge.txt」をダブルクリックすると、「hoge.txt」の中が見えます!
ずいぶん操作が簡単になりました。
でも、人間のやる操作が簡単になっただけで、
エクスプローラのやる操作は、昔と同じ。
ダブルクリックすると、人間が、
「c:\windows\notepad.exe c:\hoge\hoge.txt」
と入力する代わりに、エクスプローラが、
「c:\windows\notepad.exe c:\hoge\hoge.txt」
と実行してくれるのです。
なんで「notepad.exe」になるのかは、
ファイルの種類(拡張子)による関連付け、
というものを調べてみてください。
(ん?そんなことは、ご存知ですかね。)

ということで、ダブルクリックすると、二番目が
そのファイルのディレクトリになるわけです。

さてさて、管理人さんのサンプルだと、四番目までありますね?
これは、エクスプローラが複数選択できるからです。
例えば、「c:\hoge」に「hoge.txt」「piyo.txt」「foo.txt」があるとします。
この三つを選択してダブルクリックすると、、、
ってことです。


と、偉そうに説明しましたが、少々Windowsから離れていたので、
うろ覚えなところがあります。
ウソついてたら、すみません。

以上です。
出力例は、Console.WriteLineによってどのように出力されるかを示すため、コードのConsole.WriteLineをご覧いただければ、その意味が分かります。つまり、
System.Environment.CommandLine

"C:\VB TEST\VB.exe" "C:\VB TEST\1.bmp" "C:\VB TEST\2.bmp" "C:\VB TEST\3.bmp"
で、それ以下がSystem.Environment.GetCommandLineArgsで得られる配列の0から3までの要素です。ともかく、いろいろ試してみてください。
じゅんざさま大変分かりやすい解説、ありがとうございました。
おかげで、よく理解できた気がします。

> 管理人さま

'"C:\VB TEST\VB.exe" "C:\VB TEST\1.bmp" "C:\VB TEST\2.bmp" "C:\VB TEST\3.bmp"

恥ずかしながら、その前の

'コマンドライン引数の表示
Console.WriteLine(System.Environment.CommandLine)

を見逃しておりました。
いつもこのサイトでは勉強させていただいております。本当にありがとうございます。

今後ともよろしくお願いいたします。
それでは、失礼いたします。
解決済み!

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