プロが教えるわが家の防犯対策術!

開発機はWindows7ProfessionalでデータベースはOracle11g、ユーザークライアントはWindowsXP Professional SP3でOracleクライアントをインストールしてあります。開発機でビルドしたモジュールをユーザークライアントで動作させると、下図のようにエラーが出力され、動作しません。逆にWindowsXP上でビルドしたモジュールはキチンと動作しますし、そのモジュールはWindows7上でも動作します。毎度WindowsXPを使ってビルドしていられないので、どのようにすればWindows7でビルドしたモジュールをWindowsXP上で動作させることができるでしょうか?ちなみにビルドしたモジュールはWindowsXPの互換設定をしています。よろしくお願いいたします。

「VB.net2010で開発しています。」の質問画像

A 回答 (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/n …

この回答への補足

1050YEN様、ありがとうございました、解決しました。ODP.NETのバージョン違いのようでした。「Oracle.DataAccess.dll」をXPクライアントのパソコンからコピーして開発機Windows7の適当なフォルダに格納し、ビルド時の参照ライブラリをそのフォルダ内の「Oracle.DataAccess.dll」にしたところ、そのモジュールはXPクライアントで正常に動作しました。色々ご教授頂き真にありがとうございました。感謝いたします。

補足日時:2013/05/24 11:17
    • good
    • 0
この回答へのお礼

色々ご教授頂き真にありがとうございました。感謝いたします。

お礼日時:2013/05/24 11:43

内容を確認いたしました。



一つ実験をしてもらえますでしょうか?


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様、これは実際に試しています。結果は変わりませんでした。すみません。

補足日時:2013/05/14 11:55
    • good
    • 0

解決策は現状ではわかりません。


状況整理と確認です。

---------
-- 前提
---------
・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、他の参照設定はおこなっていません。
以上、すみませんが、よろしくお願いいたします。

補足日時:2013/05/14 09:50
    • good
    • 0

ユーザはxpのsp3って事は32bitですよね?



開発機っていうかコンパイルマシンは64bitとかでやっているとか?
あとはOracleの32/64bitの差とか?

この回答への補足

1050YEN様、ご回答ありがとうございます。WIndows7,WindowsXPのどちらも32bitです。オラクルは同じデータベースです。

補足日時:2013/05/09 17:18
    • good
    • 0

XP=.NET Framework 3.5と 7=.NET Framework 4の違いでは?



外してたらご免なさい

この回答への補足

futuman様、ご回答をお寄せいただきありがとうございます。WindowsXPもWindows7もどちらもFramework 4.0がインストールされています。

補足日時:2013/05/09 09:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!