- ベストアンサー
OpenProfileでエラー
すみませんどなたか教えて下さい。 ASPで作成したアプリで接続時にエラーになる場合があります。 global.asaに記述。 Set Ini = Server.CreateObject("AAA") lRet = Ini.OpenProfile(iniファイル) IRetは-101となります。 時間が経つと正常に動く場合があります。 サーバ:Windows2003Server SP1 IIS:6.0 どなたかアドバイスをお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
様子見ということなので、了解しました。 ただ、今後また再発する可能性がゼロではないので、 ご面倒かもしれませんが、問題のコンポーネントのソースコードや、 ドキュメント(設計書)を探して、今後のトラブル発生時の 重要リソースとして管理することを強くお勧めします。 なお、dll ですが、逆アセンブリすれば、できますが dll によっては、著作権違反に抵触する恐れがあるので ソースがないから、dllを除くという発想は、お勧めしかねるところです。 また、更に、できるのであれば、dllを使ってiniファイルを 読み込む形式ではなく、iniファイルをxmlファイルなどに移行し、 dllを使って情報読み込みをさせるのではなく、 ASP(VBScript)を使って、xmlファイルの内容を Application_OnStartで読み込ませるように改修した方が、 今後のためかと思います。 「エラーになります。でもソースがありません」では、 何も対処できないと思いますので、上記の件も含めて、 ご検討頂ければと思います。 あまりお役に立てなくてすいませんでした。
その他の回答 (4)
- kero_mio
- ベストアンサー率90% (94/104)
問題コンポーネントのソースがないとのことなので、 とりあえず、私の予測・想像の範疇では、 ・このコンポーネントは、何かの設定情報を持っている iniファイル(設定ファイル)を読み込むために使っている ・そして、そのiniファイルの読み込みに、Win APIの 「GetPrivateProfileString」を使っている可能性が高い ・で、戻り値である、-101は、Win APIの 「GetPrivateProfileString」の戻り値の可能性が高い ということです。 以上のことをまとめると ・そのWebアプリ上に必要な独自の*.iniファイルがどこかにあります。 その*.iniを探し出し、%windir%\system32\ の下か、 そのコンポーネント(dll)が設置されている場所と 同じ場所に、*.iniファイルを移動してください ・*.iniファイルを所定の場所に設定したら、IISを再起動。 すると、動くと思います。 残念ながら、そのiniファイルを探さない限り、このエラーは 絶対消えないと思います。 もし、お使いのアプリが使用している*.iniファイルが 所定の場所にあるのに、エラーになるという場合は、 また別でご相談頂けますか? よろしくお願いします。
お礼
最近は、このiniファイルを読み込めないというエラーがでなくなり、迷宮入りしそうなかんじです・・・。 アドバイスの通りiniファイルを移動してみましたが、移動するとすぐにエラーが出てWebアプリが起動しませんでした。 想像でしかありませんが、何かのタイミングの時にiniファイルが読み込めないようです。 とりあえず、再現待ちということにしたいと思います。。。 いろいろと教えていただき本当にありがとうございました。
- kero_mio
- ベストアンサー率90% (94/104)
Set Ini = Server.CreateObject("kCls100.kIni") lRet = Ini.OpenProfile(iniファイル) をGlobal.asaに記述されているとのことですが、 Application_OnStartの中で記述されてますか? もしくは、Session_OnStartの中で記述されていますか? (正式なFunction名は忘れましたが、ApplicationとSessionの どちらのLoadでやっているのか教えて下さい) ただ、今、この段階で言えるのは、コンポーネント「kCls100.kIni」 の中身がどうなっているのか、ソースコードが少しでも 公開されない限り、ご回答ができないので、 もう少し、情報を整理して頂き、情報をお寄せ頂けると助かります。 お手数をおかけいたしますが、もう少し補足情報を頂ければと 思います。よろしくお願いします。
お礼
すみません、記述にミスがありました。 誤)system32配下にコピーしたdllファイルは6つあります 正)system32配下にコピーしたdllファイルは2つ、expファイルは2つ、libファイルが2つあります 以上です、よろしくお願い致します。
補足
コメントありがとうございます。 まず、 Set Ini = Server.CreateObject("kCls100.kIni") lRet = Ini.OpenProfile(iniファイル) は、Application_OnStartで記述されています。 そして、コンポーネント「kCls100.kIni」 の中身がどうなっているのか(ソースコード)調べたいのですが、その調査方法がわかりません。 これを作った人は今いません。 サーバにあるどのファイルから調査したらよいのでしょうか?? ちなみに、レジストリに登録したdllファイルは2つ存在し、system32配下にコピーしたdllファイルは6つあります。 質問ばかりで申し訳ありませんがよろしくお願い致します。
- redfox63
- ベストアンサー率71% (1325/1856)
元々 2003サーバー IIS6.0で稼動していたのでしょうか? 前任者が開発したコンポーネントならその人にこの場合のえらーコードの意味は何かを確認しましょう また 該当部分のソースがあるならそちらを支障の無い範囲で投稿してみませんか 実行権限者のアクセス権限関連ではねられているような気もします
補足
NTサーバーIIS4.0で稼働しています。また2000サーバー、IIS5.0でも稼働しています。 そして、前任者は今はいないためその人に確認することはできません。。。 該当部分のソースは、 Set Ini = Server.CreateObject("kCls100.kIni") lRet = Ini.OpenProfile(iniファイル) IRetは-101となります。 OpenProFileで、iniファイルをオープンする処理がうまくいかない時があります。 ちなみにこの処理はApplication_OnStart 内で実行しています。 実行権限者のアクセス権限関連で、、、ということですが、ほとんどエラーは出ません。 以前はサーバー再起動後に出たようですが今は再起動後にも出なくなりました。 引き続きどういうタイミングで出るか調査していきたいと思います。
- kero_mio
- ベストアンサー率90% (94/104)
Server.CreateObject("AAA") の「AAA」にあたる部分(CLSID)が わからないと、回答できません。 これは、独自でVBやVC++で作られたコンポーネントですか? もし、独自で作られているコンポーネントや誰かが作ったフリーの コンポーネントを使用しているのであれば、そのコンポーネントの作者 に聞かない限りエラーの原因は追究できないと思います。 取り急ぎ、CLSIDを教えて下さい。よろしくお願いします。
補足
アドバイスありがとうございます。 「AAA」にあたる部分は「kCls100.kIni」です。初期の開発者が独自で作っているようです・・・。 そのコンポーネントの中身を詳しくみたいのですが、system32配下にある(使用していると思われる).dllになるんですよね? (検討違いでしたらすみません) その.dllを開いて詳細を確認するにはどのようにしたら良いのでしょうか??
お礼
ご丁寧にご指導いただきありがとうございました。 ドキュメントはなさそうですし、エラーもいつ再発するかわからないので、改修する方向で進めていきたいと思います。 本当にありがとうございました!