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

VB.NETでアプリケーションを配布

環境/言語:[Windows2000, VB.NET1.0]
分類:[.NET]

VB.NETで作成したWindowsアプリケーションを配布する場合の疑問です。

そのアプリケーションが外部のファイルを必要としない場合にはテキスト
に書いてあるとおりにセットアップファイルを作成すれば良く、
問題は起こりません。ところが、そのアプリケーションが例えば、
あるデータファイルを読み込みながら動作するとします。
そうすると、そのデータファイルも含めてインストールする必要が
あると思います。さらに問題は、通常そのようなデータファイルは
アプリケーションとは異なるフォルダに入っています。
インストールするときに、インストール先のドライブをデフォルト
ではなく、ユーザーが指定しなおす時にもアプリケーションが
動作するようにするにはどうしたらいいのでしょうか?お教えください。

私がやってみたものは、次の通りです。
1)アプリケーションをビルドする
2)セットアップウィザードを使ってデプロイメントプロジェクトを作成する。
  このとき、プロジェクト出力グループはすべて含める
  さらに、含める追加ファイルに上のデータファイルを含める
3)デプロイメントプロジェクトをカスタマイズする。
  このとき、ビルド構成をReleaseにする
4)このデプロイメントプロジェクトを含めて、ソリューションをビルドする
5)これで、セットアップファイルが作成されますので、それを他のコンピュータに
  移してセットアップを行う。
fukuです、こんにちは。

カスタム動作を使用し、カスタム動作ビューのプロパティウィンドウの
CustomActionDataプロパティに/TargetName="[TARGETDIR]\"を設定し
カスタム動作内で、
Dim TargetDir As String = Me.Context.Parameters.Item("TargetName")
インストール先のフォルダを取得し、データファイルを読み込む
方法はダメでしょうか?

以上です。
■No2558に返信(fukuさんの記事)

fuku さま、

早速のご返事ありがとうございます。
非常にレベルの高い話で、理解不消化のところが多いので、ひとつひとつ
お尋ねします。
私の質問は3点あり、
1)アプリケーションが必要とするデータファイルに関する情報をインストーラ
  に入れるにはどうするか?
2)そのデータファイルはインストーラとともに自動的にセットアップファイル等と
  どもにたとえばReleaseディレクトリにコピーされるのか?
3)開発用コンピュータ以外のコンピュータにアプリケーションを配置するときに
  インストールするディレクトリを指定できるのか?
です。

>カスタム動作を使用し、カスタム動作ビューのプロパティウィンドウの
>CustomActionDataプロパティに/TargetName="[TARGETDIR]\"を設定し
>カスタム動作内で、
>Dim TargetDir As String = Me.Context.Parameters.Item("TargetName")
>インストール先のフォルダを取得し、データファイルを読み込む


この方法で、TargetName,TARGETDIR,TargetDirは それぞれ私の質問の1)3)の
どれに対応するのでしょうか?
カスタム動作については全く経験がないので、初歩的な
質問ですみません。お答えいただくとありがたいです。
fukuです、

データファイルには、どの様なものが入っていますか?
また、データファールもアプリと一緒の配布になるんです
よね。
■No2591に返信(fukuさんの記事)
> fukuです、
>
> データファイルには、どの様なものが入っていますか?
> また、データファールもアプリと一緒の配布になるんです
> よね。

ご返事ありがとうございます。
データファイルは例えば、辞書ファイルのようなもので
それを読み込んで英単語の意味を表示するシステムを
想定しています。ですからシステムのソースの中で
そのデータファイルの場所を指定していることになります。
fukuです。

> データファイルは例えば、辞書ファイルのようなもので
> それを読み込んで英単語の意味を表示するシステムを
> 想定しています。ですからシステムのソースの中で
> そのデータファイルの場所を指定していることになります。

であれば、カスタム動作でレジストリに辞書ファイルのインストール
パスを書き込んで、実際にソースで使うときにレジストリから
パスを読み込んで辞書ファイルを求める方法でどうかと思います。

カスタム動作
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsintro7/html/vbconthecustomactionseditor.asp

レジストリ
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfMicrosoftWin32RegistryKeyClassTopic.asp
fukuさん,

何度もありがとうございます。
私はまったくどんくさい方法で対応することを考えていました。
インストールしたファイルを検索する方法です。

> であれば、カスタム動作でレジストリに辞書ファイルのインストール
> パスを書き込んで、実際にソースで使うときにレジストリから
> パスを読み込んで辞書ファイルを求める方法でどうかと思います。
>

後半はわかりました。前半は経験がないのでどうもわかりません。
前半は2つの動作がからんでいるように思います。まず、ユーザー
がターゲットコンピュータにアプリケーションをインストールします。
(そのときに、ドライブかディレクトリも変えてインストールするかも
しれません。)辞書ファイルもそのときにインストールします。
次の動作で、そのインストールパスをレジストリに書き込みます。
「カスタム動作」でその2つの動作を一度に指定できるということでしょうか?
何度も煩わせてすみませんが教えてください。
お願いします。
fukuです。

カスタム動作が難解であれば、レジストリからインストール先の
パス情報を確認することも可能です。
インストールマシンの以下のレジストリを確認してください。
HKEY_CURRENT_MACHINE\\
SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\Folders

Registry.LocalMachine.OpenSubKeyと
myProgKey.GetValueNamesを組み合わせれば値をとってこれます。

以上です。
fukuさん、

ありがとうございました。OpenSubKeyとGetValuesNamesを使い、
レジストリからインストールパスを引き出すことができました。
カスタム動作はどうもうまくいきませんでしたが、これをきっかけに
勉強してみます。お世話になりました。
解決済み!

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