- ベストアンサー
Windows7でVB.net2010開発時のエラーを解決する方法
- VB.net2010でWindows7で開発したモジュールをWindowsXP上で動作させるとエラーが発生する問題について解決方法を紹介します。
- Windows7でVB.net2010で開発したモジュールはWindowsXP上では正常に動作しない場合があります。ビルドしたモジュールをWindowsXP上で動作させるための方法を説明します。
- VB.net2010で開発したモジュールをWindows7上でビルドしてもWindowsXP上では動作しない問題が発生します。Windows7でビルドしたモジュールをWindowsXP上で動作させるためには、互換設定を行う必要があります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
そちらで現在公開している情報と全く同じ環境で、以下のコードをWin7 32bit vb2005にてコンパイルを行いました。 ※Oracle.DataAccessを参照設定に追加 Imports Oracle.DataAccess.Client Public Class Class1 Public Shared Sub Main() Dim l_strCnn As String = "User Id=ユーザID;Password=パスワード;Data Source=TNS設定名;Connection Timeout=900;Pooling=False;Min Pool Size=10;Validate Connection=true;" Try MsgBox("1.起動") Using l_oraCnn As New OracleConnection(l_strCnn) MsgBox("2.接続開始") l_oraCnn.Open() MsgBox("3.接続中") l_oraCnn.Close() MsgBox("4.接続終了") End Using MsgBox("5.終了") Catch ex As Exception MsgBox(ex.Message) End Try End Sub End Class コンパイル後、「Test.exe」と「Oracle.DataAccess.dll」を抜き出し実行を行うと、こちらの環境ではWin7でもXPでも正常に動作を行うことが出来ました。 ndoxxさんの環境では「2.接続開始」まで行かないって事ですよね? OracleClientのバージョンが一致しているのにインスタンスが行えないとなると、、、 あとはFramework本体を疑うしかないかな・・・パッチの状況とか・・・ http://www.atmarkit.co.jp/ait/articles/1210/26/news086.html
その他の回答 (4)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
内容を確認いたしました。 一つ実験をしてもらえますでしょうか? 1.Win7でコンパイル 2.コンパイル後に出力先フォルダに存在するexe/dllファイル等を、全てXP端末にコピー 3.「XP端末にコピーしたExeの階層」にWin7からコピーしたOracle.DataAccess.dllがあると思いますが、 【XP端末の「C:\app\《何らかのユーザ》\product\11.2.0\client_1\ODP.NET\bin\2.x\」】 からOracle.DataAccess.dllをコピーして、exeファイルの階層に存在するdllとOracle.DataAccess.dllを差し替え 4.XP上でアプリケーションを起動 もしexeファイル階層にOracle.DataAccess.dllが配置されていない場合は、、、 この実験は無意味ですが・・・ 因みに・・・ >ビルドで出来上がったモジュールのプロパティで互換性でWindowsXPSP3にチェック ・EXEファイルのプロパティ →互換性タブ →互換モードでこのプログラムを実行する →WindowsXP(ServicePack3) ということですね? これはWin7端末実行時の挙動設定ですので、XPで実行するときは無関係ですので設定は不要だと思いますよ。
補足
1050YEN様、これは実際に試しています。結果は変わりませんでした。すみません。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
解決策は現状ではわかりません。 状況整理と確認です。 --------- -- 前提 --------- ・Windows7 WindowsXPは共に32bitである ・Windows7 WindowsXPは共にOracleClient11gの同じバージョン(リビジョンを含む)がインストールされている --------- -- 状況 --------- ・Windows7でコンパイル→WindowsXPでの動作「×」 ・WindowsXPでコンパイル→Windows7での動作「◎」 ということですよね? 因みに私の今担当している開発プロジェクトは、上記前提と同様でして、コンパイルマシンはWin7で行っていて、クライアントアプリの配布は配布はClickOnceを使用しています。 もちろん稼動は正常にしています。 コンパイル方法については、特段「XP用に」としての設定をすることはしていません。 そこで逆に質問です。 ※質問1 >ちなみにビルドしたモジュールはWindowsXPの互換設定をしています。 とありますが、具体的にどのような設定を行っているのでしょうか? ※質問2 OracleClient11gは、Win7もXPもリビジョンまで(OracleClient 11.0.2.0等)が全く同じということですよね? インストールされている正確なバージョンを、リビジョンまで知りたいです。 ※質問3 接続に利用しているクラスはどのネームスペース配下のクラスを利用していますか? ・Oracle.DataAccess.Client ・System.Data.OracleClient ・System.Data.Odbc ・System.Data.Common ※質問4 デバッグコードを挿入できるのであれば、アプリケーション起動時の先頭で MsgBox(1)というコードを入れたとき、メッセージボックスが表示されますか? (アプリケーションが正常後にエラーが起きているか、または起動自体が出来ないのかを切り分けしたい) ※質問5 業務Exeとは別に簡素なExeを作成(接続オープン・クローズのみ)を作成して、状況を確認することは出来ませんか? ※質問6 Microsoftの.net Framework以外に、参照設定(サードパーティ製品等)を行っていませんか? (Office製品の参照設定がある場合は、Win7とXPのバージョンが異なると問題があると思います。)
補足
1050YEN様、ご回答ありがとうございます。逆質問にお答えいたしますのでよろしくお願いいたします。 ご質問1、ビルドで出来上がったモジュールのプロパティで互換性でWindowsXPSP3にチェックを入れています。ご質問2、11.2.0.1.0です。ご質問3、Oracle.DataAccess.Clientです。ご質問4、MessageBOX.Showを入れました。実行させるとメッセージボックスは表示されます。Oracleコネクションをインスタンスするところでエラーがでてこけます。ご質問5、状況を確認したところ同様のエラーとなります。ご質問6、他の参照設定はおこなっていません。 以上、すみませんが、よろしくお願いいたします。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
ユーザはxpのsp3って事は32bitですよね? 開発機っていうかコンパイルマシンは64bitとかでやっているとか? あとはOracleの32/64bitの差とか?
補足
1050YEN様、ご回答ありがとうございます。WIndows7,WindowsXPのどちらも32bitです。オラクルは同じデータベースです。
- futuman
- ベストアンサー率60% (3/5)
XP=.NET Framework 3.5と 7=.NET Framework 4の違いでは? 外してたらご免なさい
補足
futuman様、ご回答をお寄せいただきありがとうございます。WindowsXPもWindows7もどちらもFramework 4.0がインストールされています。
お礼
色々ご教授頂き真にありがとうございました。感謝いたします。
補足
1050YEN様、ありがとうございました、解決しました。ODP.NETのバージョン違いのようでした。「Oracle.DataAccess.dll」をXPクライアントのパソコンからコピーして開発機Windows7の適当なフォルダに格納し、ビルド時の参照ライブラリをそのフォルダ内の「Oracle.DataAccess.dll」にしたところ、そのモジュールはXPクライアントで正常に動作しました。色々ご教授頂き真にありがとうございました。感謝いたします。