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

ビルドで作成したexeファイルが動作しません

環境/言語:[OS : Windows XP Home Edition / 言語 : Visual Basic .NET]
分類:[.NET]

【解決したい問題】

初めて投稿致します。

VB.NET 2003 を使ってアプリケーションを作っています。
一応デバックが完了したので、ビルドして実行形しくファイルを作成しました。
テストで作成した.exeファイルを実行したところ、下記の様なエラーが発生してしまい、動作しませんでした。

Sysytem.Data.OleDbeException:パス 'D:\...\...\.....'は正しくありません。・・・・

しかし、IDE上での実行では正常に動作しますし、その段階で作成された
¥binフォルダー内の.exeファイルでは動作します。
配布用の実行ファイルを作成しようとリリースビルドを行い作成した.exeファイルでは実行出来ませんでした。
Helpファイルを検索したり、ネット上で検索して見ましたが、ヒントらしい案件が見つかりませんでした。

御助言下さいます様、御願い致します。

【追加事項】

VB.NETでのプログラム作成は初めてです。
基本的な事が分かっていないと思いますので、素人に教える様な形で
御助頂けましたら、幸いに存じます。

宜しく御願い申し上げます。
> Sysytem.Data.OleDbeException:パス 'D:\...\...\.....'は正しくありません。・・・・
OleDbExceptionで指示されるパス(..\..\ファイル名)をあなたのコードのどこか、あるいはプロパティのどこかで指定していませんか?
それと同じ位置関係になるように、ファイルを配置してください。

> 基本的な事が分かっていないと思いますので、素人に教える様な形で
> 御助頂けましたら、幸いに存じます。
もう少し現象を詳しく書いて頂けないと、分かりやすい説明というのは難しいのではないでしょうか。
現状の情報では、回答者は憶測でしか書けませんし、mitさんの解決に結びつかない情報が寄せられる可能性があります。

関係しそうな情報例
・配布用のexeはどのように実行したか(どこかにコピーしたか?)
・配布用のexeはセットアッププロジェクト等でインストールしたものか
・何のコントロールを使っているか、あるいはどこのサンプルを元にプログラムを作成したか
・どんなコードで実行しているのか
・どのようにプロパティを設定したか
■Azuleanさん

早々の御助言有り難う御座います。

> OleDbExceptionで指示されるパス(..\..\ファイル名)をあなたのコードのどこか、あるいはプロパティのどこかで指定していませんか?

上記の件ですが、ソースコード内には”OleDbException”は指定されていませんでした。

> それと同じ位置関係になるように、ファイルを配置してください。

”動かない”と言う”.exe”ファイルを他のフォルダーにコピーしてみたところ
動きました!!

> もう少し現象を詳しく書いて頂けないと、分かりやすい説明というのは難しいのではないでしょうか。
> 現状の情報では、回答者は憶測でしか書けませんし、mitさんの解決に結びつかない情報が寄せられる可能性があります。

仰る通りです。(すみません・・・)

> 関係しそうな情報例
> ・配布用のexeはどのように実行したか(どこかにコピーしたか?)

ビルドを行った時に ”¥obj”フォルダー内に”.exe”ファイルが作成さましたので、取りあえず動くかと思い、どこにもコピーなどせず、その場で起動してみました・・・。(エディターは終了させて、エクスプローラからobjフォルダー内の実行ファイルを起動しました。)
そうしましたところ、エラーが出て実行で出来なかったので・・・。
(パニクってしまいました。)
しかし、同じ方法で¥binフォルダー内の.exeファイルを起動したところ、
動作しました。
「同じ実行ファイルなのに、どうして・・・?」と、よけい深みにはまりました。

> ・配布用のexeはセットアッププロジェクト等でインストールしたものか

いいえ、まだセットアッププロジェクトは作成していません。
今から、作成して試してみます。(すんなりと、作成できると良いんですが・・・)

> ・何のコントロールを使っているか、あるいはどこのサンプルを元にプログラムを作成したか

そもそも、以前から社内にあった物です。
ですから、開発時の経緯や仕様内容が良く分かっていません。
(当時の関係者にも確認出来ない状況です・・・。)

> ・どのようにプロパティを設定したか

プロパティの設定も、どこで行っているのか? 解析中です。

引き続き、作業を行って見ます。
取りあえず、御礼と御報告まで・・・。
また、不明点が発生すると思います。その時は、宜しく御願い致します。
>>OleDbExceptionで指示されるパス(..\..\ファイル名)をあなたのコードのどこか、あるいはプロパティのどこかで指定していませんか?
>
> 上記の件ですが、ソースコード内には”OleDbException”は指定されていませんでした。
OleDbExceptionは例外の名前です。
ファイル名ではありません。

> ”動かない”と言う”.exe”ファイルを他のフォルダーにコピーしてみたところ
> 動きました!!

> いいえ、まだセットアッププロジェクトは作成していません。
> 今から、作成して試してみます。(すんなりと、作成できると良いんですが・・・)
原因を突き止めておかないと、また動かなくなる可能性があると思います。
セットアップ関連で再発する可能性が高いです。

> ビルドを行った時に ”¥obj”フォルダー内に”.exe”ファイルが作成さましたので、取りあえず動くかと思い、どこにもコピーなどせず、その場で起動してみました・・・。
> しかし、同じ方法で¥binフォルダー内の.exeファイルを起動したところ、
> 動作しました。
objフォルダは中間ファイルのフォルダです。
基本的にbinフォルダのファイルを使用するようにしてください。

> 「同じ実行ファイルなのに、どうして・・・?」と、よけい深みにはまりました。
何らかの差異があるのだと思いますが、それが何かとは今のところ分かりません。

> そもそも、以前から社内にあった物です。
> ですから、開発時の経緯や仕様内容が良く分かっていません。
> (当時の関係者にも確認出来ない状況です・・・。)
訳の分からないものをそのまま使用し、新たな製品として使っていくと、そのうちトラブルが起きそうな気が…。
「実績があるから」「コストを削減したいから」として流用するというのは分かりますが、仕様が分からない状態はまずいと思います。
(開発終盤や発売後対応で泣きを見るリスクがあるか?)
Azuleanさん

御助言有り難う御座います。

> OleDbExceptionは例外の名前です。
> ファイル名ではありません。

(申し訳有りません。勉強不足で・・・。)

> 原因を突き止めておかないと、また動かなくなる可能性があると思います。
> セットアップ関連で再発する可能性が高いです。

一応、原因らしき事が分かりました。
プログラム内で、「デ−タベース」ファイルを参照しているようです。
その参照しているファイルの配置場所が、指定されていまして、
そこに配置したところ動作しました。

>>動作しました。
> objフォルダは中間ファイルのフォルダです。
> 基本的にbinフォルダのファイルを使用するようにしてください。

入門書等には、objフォルダに作成されたファイルを使う様に
書かれている物が有りますが・・・・。
objフォルダのファイルはインストーラでインストールしないと
ダメなのでしょうか?
(インストーラに対する中間ファイルなのでしょうか?)

>>「同じ実行ファイルなのに、どうして・・・?」と、よけい深みにはまりました。
> 何らかの差異があるのだと思いますが、それが何かとは今のところ分かりません。

上記と合わせて、疑問です・・・。


> 訳の分からないものをそのまま使用し、新たな製品として使っていくと、そのうちトラブルが起きそうな気が…。
> 「実績があるから」「コストを削減したいから」として流用するというのは分かりますが、仕様が分からない状態はまずいと思います。
> (開発終盤や発売後対応で泣きを見るリスクがあるか?)

仰る通りです。現在も解析中です・・・。


追記:
御返事が遅くなりまして、申し訳有りませんでした。
> 入門書等には、objフォルダに作成されたファイルを使う様に
> 書かれている物が有りますが・・・・。
> objフォルダのファイルはインストーラでインストールしないと
> ダメなのでしょうか?
> (インストーラに対する中間ファイルなのでしょうか?)
次のようなサイトを見る限り、objフォルダはビルド時の中間ファイル置き場と言えます。
インストーラに対する中間ファイルというわけではありません。

http://www.atmarkit.co.jp/fdotnet/easyvs2nd/easyvs2nd02/easyvs2nd02_02.html
http://msdn2.microsoft.com/ja-jp/library/tta90aft.aspx

注:但し、Visual Studioのセットアッププロジェクトはobjフォルダからexeファイルを回収するようです。

>>何らかの差異があるのだと思いますが、それが何かとは今のところ分かりません。
> 上記と合わせて、疑問です・・・。
exeファイル自体に差はないはずです。
データベースファイルが同じフォルダにある等の差ではないですか?
(binフォルダのexeファイルはobjフォルダのexeファイルがそのままコピーされるはず)
ソース内で指定されている場所にデータファイルを
配置したところ、動作しました。
(無事解決致しました。)

いろいろと、有り難う御座いました。
今後とも、宜しく御願い致します。
解決済み!

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