セットアッププロジェクトで作成したSetup.exeでインストールしたEXEがエラーで動きません。

解決


VB勉強中  2009-03-25 09:49:15  No: 101615

セットアッププロジェクトでインストーラを作成して、別のPCにインストールしたのですが、
『例外:’System.InitializationException’が ○○.exeで発生しました。』
というエラーがでてEXEが起動しません。ネットで検索してもあまり情報が集まらずに困っています。このエラーを起こしたEXEは、プログラムをしたPCではきちんと動きます。
  VisualStudio2005を使っています。ファイルの配置などはセットアッププロジェクトから作ったインストーラなのでファイルの配置などは問題ないと思うのですが、どこが悪いのか調査しようと思っても、どのような手段があるのかも分かりません。
  調査方法、もしくは似たような経験で四苦八苦された方がおられましたら、なにかアドバイスをいただければ嬉しいです。よろしくお願いします。


オショウ  2009-03-25 20:21:03  No: 101616

まずインストールされた方のモジュール一式と、インストールしたい
本来のプロジェクトに含まれるモジュールの一式を確認しないと解決
には至らないかと。

\プロジェクト名\bin\Debug\〜
\プロジェクト名\bin\Release\〜

多分、Releaseフォルダ下のものを対象にインストーラを作成された
と思いますが、\bin\Release下にある最低限必要なファイルが、イ
ンストーラでインストールした先のフォルダ下にすべて存在してい
るのかどうか確認して下さい。

EXEやDLL、あと.configや設定ファイル等です。

因みに、\Releaseフォルダを、全く違うドライブ・パスにコピーし
て、そのEXEが実行できるか確認することも重要かと。
別PCにでもコピーしてやれば尚よいかと。

以上。


VB勉強中  2009-03-26 09:53:01  No: 101617

オショウさんアドバイスありがとうございます。

  早速、試してみようと思ったのですが、\binにDebugやReleaseフォルダが作成されていないことに気づきました。変わりにあるのはjaというフォルダです。何か設定がおかしいのでしょうか?
  そこで、現在インストールしようとしているプログラムとは別に簡単なフォームの表示のみのプログラムを作ってビルドするときちんとご指摘のフォルダが作成されました。また、このEXEを同じ手順でインストーラを作って、別PCにインストールすると上手く行きました。

  また、インストーラを作成するのに使ったEXEは、プログラムを作成したPCならば別のドライブで起動させても上手く動きました。別のPCだとNGでした。

  因みに、現在はVisualStudio2005を利用していますが、つい最近までVisualStudio2000を使っていました。よってプログラムはVisualStudioを新しくする際に変換(自動で変換される機能をそのまま使いました)しています。以前(2000のとき)も同じようにインストーラを作って別PCにインストールしていましたがそのときには上手くいっていました。このあたりのプログラムの変換作業が影響しているのでしょうか。
  大変申し訳ないのですが、なにかお気づきのことがありましたらまたご教授いただければと思います。


オショウ  2009-03-26 11:18:44  No: 101618

VisualStudio2000 と言うものはありません・・・
VisualStudio2002/VisualStudio2003 のどちらか?

別の新しいソリューションを作って、問題のあるソリューションの
ソースファイルだけコピーしてEXEを作成したらどうなりますか?

それでもう少し明確になろうかと。

以上。


VB勉強中  2009-03-28 10:56:08  No: 101619

オショウさん、たびたびの回等大変ありがとうございます。

>別の新しいソリューションを作って、問題のあるソリューションの
>ソースファイルだけコピーしてEXEを作成したらどうなりますか?

試してみました。今度はエラーメッセージの詳細が出てきましたので少し手がかりが増えました。
コードをそのまま入れ替えるだけで多少の前進がありましたので、少なからず旧バージョンから新バージョンへのコードの変換にも原因があったようです。しかし、コードにも問題があるようです。以下のメッセージの『System.IO.FileNotFoundException』についてもう少し調べてみようと思います。
もし『こういうことだよ』と分かれば、再度ご教授頂ければ嬉しいです。
※因みにG001とかD003はプログラム名で,G001はEXEでD003はDLLです。

<エラーメッセージ>
************** 例外テキスト **************
System.TypeInitializationException: 'OriginalShape.M_G001' のタイプ初期化子が例外をスローしました。 ---> System.IO.FileNotFoundException: ファイルまたはアセンブリ 'ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
ファイル名 'ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' です。
   場所 D003.Cl_D003..ctor()
   場所 OriginalShape.M_G001..cctor() 場所 C:\D_MainProgram\Source\OriginalShape\OriginalShape\M_G001.vb:行 11


オショウ  2009-03-28 18:09:22  No: 101620

ADODB・・・どこかで、データベースアクセスする機能を
利用されおられるようですが・・・

で、当然、セットアップなのでその依存関係としてADO.NET
絡みのモジュールもインストールする必要があります。

2005は最近使っていないので・・・
セットアッププロジェクトのプロパティで、必須コンポーネント
と言うボタンがあるので、それをクリック
表示される画面の多分トップに・・・
Microsoft Data Access Components 2.x
がありますので、それにチェックを入れて・・・

私の場合、MDACをインストールモジュールに含めるのですが、
必須コンポーネントのインストール場所を指定・・・
で、どこからインストールするか選択してOKボタンクリック

この後、再度リビルドすればOKかと。

要はインストール先に依存関係のMDACのバージョンが無かった
と言うことでしょう。

以上。


VB勉強中  2009-03-30 03:18:39  No: 101621

オショウさん、ありがとうございました。解決しました。
ただ、ご指摘のようにセットアッププロジェクトのプロパティの設定をしてみましたが上手く行かず、四苦八苦しながら、インストールするプログラムの参照設定で、ADODBのプロパティーを『ローカルコピーする』(ADODBもインストールモジュールに含めました)に設定する方法をとってみました。そうすると上手く行きました。

的確なアドバイスのおかげで問題が思ったよりも早く解決しました(根本的に様まだまだ問題のある設定やロジックはありそうなのですが・・・)。VBの開発環境などについてもう少し勉強してみようと思います。すばやい回答に対してすぐに返信が出来ずに申し訳ございませんでした。この掲示板にはまたお世話になると思います。その際にはまたアドバイスをいただけると嬉しいです。ありがとうございました。


VB勉強中  2009-03-30 03:19:33  No: 101622

すみません。解決済みサインを立てるのを忘れていました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加