dポイントプレゼントキャンペーン実施中!

環境 DB Windows2000Server + SqlServer2000
WEB Windows2000Server + IIS5.1?

WEBサーバーに存在する、VB6SP5で作成したSAMPLE.EXEを単体で実行すると
問題なくDBに接続できますが、IISでactiveX.Dllからshell関数で呼出した
同じSAMPLE.EXEからは、DBに接続するときに以下の様なエラーが表示されます。
※タスクマネージャーで確認すると、SAMPLE.EXEは正常に起動しています。

Err.Number = -2147467259
Err.Description = [DBNMPNTW]ConnectionOpen (CreateFile()).


SAMPLE.EXEでは以下のように、DBに接続を試みています。

strConn = "Provider=MSDataShape.1;Persist Security Info=False;Connect Timeout=15;" _
& "Data Source=192.***.***.***;" _
& "User ID=sa;" _
& "Password=;" _
& "Initial Catalog=DB_NAME;" _
& "Data Provider=SQLOLEDB.1"
Set objConn = New ADODB.Connection
objConn.ConnectionString = strConn
objConn.Open


エラーからすると、名前付きパイプの問題でもあるようですが
EXEをDOS窓またはエクスプローラー上から実行すると問題ないので、
実行ユーザーの権限の問題でしょうか?
activeX.DllからはDBに接続できます。


どうしてでしょうか。
宜しくお願い致します。

A 回答 (2件)

接続時にネットワークライブラリの指定が無いので名前付きパイプでの接続になっていますね。



IIS+ASPから呼び出したActiveX DLL内でshell関数で実行したプロセスの実行ユーザーはIISの匿名ユーザー?あるいは何かのシステムアカウント?になっているのだと思いますが、SQL-Serverがそのユーザーでの接続を許していないので接続できないのだと思います。

名前付きパイプの場合は信頼関係接続でもそうでなくてもまずSQL-Serverがアプリを実行しているユーザーを認識できないと接続はできません。
手で実行すると接続できるのは、OSにログインしているユーザーはSQL-Server側で認識できているからです。

このようなケースではActiveX DLLをコンポーネントサービスに登録して特定ユーザーが実行している状態を作るか、ネットワークライブラリをTCP/IPソケットに変更して信頼関係接続ではなくSQL-Server認証で接続すればOKです。
    • good
    • 0

Shellで呼び出すと、ユーザーが変わってしまうようですよ。



サービス化して、サービスのユーザで実行されるようにするとか、EveryOneでのアクセス権を許すとかしないといけないようです。
以前、Runasで何とかならないかとやってみたのですが、うまくいきませんでした。

想像なのですが、タイムアウトするような処理をExeに分離しようとしているとかですか?
それなら、DLL内で別スレッドを呼ぶとかで回避できないでしょうか?
    • good
    • 0

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

関連するカテゴリからQ&Aを探す