作成するWinアプリと特定のファイルを関連付けるには?

解決


soukon  2008-06-19 11:40:02  No: 144840  IP: 192.*.*.*

お世話になります。
言葉足らずなこともあるかと思いますがよろしくお願い致します。

ほとんど表題と同じ書き方になりますが
開発予定のWinアプリと特定のファイル(拡張子を仮に*.abcとしたテキストファイル)
とを関連付ける事は可能でしょうか?
*.docを開くとWordが起動するように、
*.abcを開くと開発予定のWinアプリを起動することはできないかと…

ちなみにこの*.abcは印刷用のデータで、
開発予定のWinアプリは同じく印刷系の物になる予定です。
まだ予定段階ですが開発環境はWinXPおよびVB.NET(2003)かVB2005になる予定です。

編集 削除
特攻隊長まるるう  2008-06-19 12:49:19  No: 144841  IP: 192.*.*.*

プログラムから直接変更する場合はレジストリを変更する必要がありますが、
インストーラに設定することで、インストーラがレジストリを書き換えて
くれるような仕組みが用意されています。

編集 削除
soukon  2008-06-19 17:12:11  No: 144842  IP: 192.*.*.*

特攻隊長まるるうさん、返信ありがとうございます。

まだ開発に参加できるかも分からないレベルで
当面は開発に役立ちそうな技術調査をしていましたが
まずは何をどんなキーワードで調査すれば良いのかも
分からない状態でしたので回答が付いてホッとしました。
# 余談すみません。

おそらく、そのものズバリなヒントを頂いているのだとは思いますが
>プログラムから直接変更する場合はレジストリを変更する必要がありますが、
プログラムからレジストリ……ごめんなさい、ちょっと私には難しいです。
(ですが後学のため情報は集めてみようと思います)

>インストーラに設定することで、インストーラがレジストリを書き換えて
>くれるような仕組みが用意されています。
こちらの方は、デプロイメントプロジェクトで作成するインストーラかな?
というところまで来まして…プロパティの設定なのか別の設定なのか、
調べていこうと思っています。

編集 削除
特攻隊長まるるう  2008-06-19 17:24:08  No: 144843  IP: 192.*.*.*

基本、ヘルプ(MSDN)に載ってるけど、実際に環境をそろえて実行しながらでないと
イメージつかめないと思います。

どうもヘルプ(or MicroSoft)は『配置』という単語を使いたがっているようです。
チュートリアルのページがあるので、順に実行していけば、必要最低限の設定は
出来ると思います。
[チュートリアル : Windows アプリケーションの配置]
http://msdn.microsoft.com/ja-jp/library/aa291419(VS.71).aspx
>ファイルの関連付けの作成

編集 削除
soukon  2008-06-22 23:32:47  No: 144844  IP: 192.*.*.*

特攻隊長まるるうさん、度々ありがとうございます。
今は自宅ですがお礼も兼ねて書き込ませてもらいます。

>基本、ヘルプ(MSDN)に載ってるけど、実際に環境をそろえて実行しながらでないと
>イメージつかめないと思います。
確かにそのような状況に陥っています…
手近にVB.NET(2003)環境があるので適当なサンプルアプリをもとにして
デプロイメントプロジェクトについて色々調査してみるつもりでいます。

あとは(最終的に)今回やりたい事はプログラム的には(技術的には)
どのような事をして実現するのか?などを調査しようと思います。
# 個人的に勉強して開発参加の可能性が少しでも上がればなぁと。

「起動した時点でアプリは開かれた*.abc(パスとか)を認識して印刷用にそこからデータを読み込むには?」
といった所から調査してみようと思っています。
印刷自体は使用する帳票作成ツールによっても違う?でしょうし。

ですが、こちらもまた…
>まずは何をどんなキーワードで調査すれば良いのかも
最初のとっかかりといいますか、調査すべきところといいますか助言頂ければ幸いです。
もちろん当初の「関連付け」とは異なる質問かと思いますので、よろしければで結構です。

まとまりのない文章ですみませんでした。

編集 削除
特攻隊長まるるう  2008-06-23 19:02:10  No: 144845  IP: 192.*.*.*

ファイルの関連付けもそうだけど、VBがメインの話ではなく、OSの仕組みに関連する
内容です。全く知識が無いなら MS-DOS や コマンドラインを勉強してみては?

編集 削除
soukon  2008-07-03 16:40:47  No: 144846  IP: 192.*.*.*

特攻隊長まるるうさん、お礼が随分と遅くなり大変申し訳ありませんでした。
# 自分なりにいろんなサイト等で調査して頭の中で整理するのにやたら時間がかかってしまった…
# スレッドを何日も(お礼やら、報告やら)ほったらかし状態でしたがどうかお許し下さい。

ほったらかした分の(長くなるかもですが)報告致します。
テスト環境はWinXP , VB.NET(2003)です。
結論から申し上げますとなんとか自分なりの道筋が見えてきました。

まず、当初の質問であった「ファイルの関連付け」ですが、
助言頂いた通り、インストーラの設定で行えそうです。
# さらにOrca(?)で詳細の確認や編集が出来るような事も知りました。
最終的にリリースする際にはもちろんインストーラに設定する予定ですが、
今回のテスト環境上ではエクスプローラから、
ツール → フォルダオプション → ファイルの種類にて
ファイル(*.abc)と、テストアプリを関連付けてみました。

次に下記についてですが、
>あとは(最終的に)今回やりたい事はプログラム的には(技術的には)
>どのような事をして実現するのか?などを調査しようと思います。
>
>「起動した時点でアプリは開かれた*.abc(パスとか)を認識して印刷用にそこからデータを読み込むには?」
調査してくうちに、いかに欲張りな(一度にたくさんの)質問だったのかと…

>「起動した時点でアプリは開かれた*.abc(パスとか)を認識して
については、"起動時のコマンドラインを配列で取得する" に辿り着き、
System.Environment.GetCommandLineArgsメソッドの存在を知り試してみました。
# 配列(0)番目にはサンプルアプリのパス、
# (1)番目には開かれたファイルのパスを取得している?
# ファイルパスは(1)番目固定で大丈夫か?といった疑問は多少残りますが…

>印刷用にそこからデータを読み込むには?」
については、上記で取得したパスを元に
System.IO.StreamReaderクラスでテキストファイルを1行ずつ読込む手法や
ADO.NETでCSV形式テキストファイルを読み込む(DataTableや配列に取得する)手法を見つけました。
今回の*.abcは、CSV形式のテキストファイルなので後者が良いかと思いましたが
そのままのファイル名だとうまくいかないようなので(*.txtにリネームするとうまくいく)
System.IO.StreamReaderクラスと、Splitメソッドで配列に取得する方法を知り試してみました。


ここから先は(普段やらされている)印刷プログラムを作成するだけなので何とかなりそうです。
もし何か勘違いしている事や注意点などあればツッコミいただけると助かりますが、
とりあえず解決マークは付けておきます。ありがとうございました。

編集 削除
特攻隊長まるるう  2008-07-04 11:50:05  No: 144847  IP: 192.*.*.*

まだまだ不十分な内容や誤解は多々ありそうですが、よく調べられてると思います。

いちいち説明してるとどうしても長くなるので、どこのサイトを参考にしたか
リンクを貼ってもらえれば、あとは理解した要点のみで大体把握できると
思います。

>インストーラ
[VB.NET]付属のデプロイメントプロジェクト以外にも幾つかあります。
デプロイメントプロジェクトで十分だと思うので特に紹介しませんが、
『VB.NET インストーラ』といったキーワードで検索すれば情報は
たくさん集まるでしょう。
http://okwave.jp/qa494387.html
ファイルの関連付けは、アプリケーションの動作の重要な要素ですので
ほとんどのインストーラで簡単な設定で登録できるような対応がされている
と思います。

>デプロイメントプロジェクト
DOBON.NET さんの情報が一番充実してるかな?と思います。
http://dobon.net/vb/dotnet/index.html#deployment

>ファイルの関連付け
調査内容がVBの視点から抜け切れてないように感じます。
もちろん、たちまち役に立つのはVBの知識でしょうが、
『ファイルの関連付け MS-DOS』といったキーワードのみで調べないと
># ファイルパスは(1)番目固定で大丈夫か?といった疑問は多少残りますが…
このあたりの疑問は解決されないでしょう。
http://www2.chokai.ne.jp/~assoonas/UC301.HTML
基本、問題ないですが、それさえも設定次第ということです。

>レジストリ
プログラムから関連付けるにはレジストリを操作するコマンドを使用します。
http://dobon.net/vb/dotnet/system/associatedapp.html
Windows で関連付けるには
>今回のテスト環境上ではエクスプローラから、
>ツール → フォルダオプション → ファイルの種類にて
その通りです。実際はレジストリの情報が更新されています。

じゃあ、レジストリとは?ってことになると、これもVBは関係ない話です。
http://www.dr-pc.jp/reg1.htm
少し分かってきたなら
http://jet2.u-abel.net/program/winreg.htm

深いところまで調べだすときりがないので、適当なところで切り上げたので
良いと思います。

編集 削除