- PR -

IIS+basp21で外部EXE及びDLLの実行のための設定

1
投稿者投稿内容
JIMMY
常連さん
会議室デビュー日: 2004/10/26
投稿数: 32
お住まい・勤務地: 東京
投稿日時: 2004-11-25 05:28
IISと.NET Frameworkで苦戦しています。

似たような事例をいくつか確認し、一通り試したのですが結果が出
ないためあえてスレッドを立てさせていただきました。

実現したいことは

  • IISでpostパラメタを他のサーバ及びクライアントから受け取る。
  • 受け取ったパラメタを既存のAPI(dll)に渡して結果を取得する。
  • リクエスト元にAPIの結果を通知する。
です。

現在既に下記のような形式の仕組みが出来上がりつつあります。

  • aspx(vb)でpostパラメタを受け取る。
  • basp21でAPI呼び出しようのexe(C++)を実行する。
  • exeからAPIを実行し、結果を受け取る。
  • exeが結果を標準出力し、それをbasp21が結果情報として受け取る。
  • aspxが結果をリクエスト元に返す。

exeはコンソールアプリケーションで作成したので、コマンドライン
での動作確認は出来ていて、問題ありません。
aspxからexeを実行するためのbasp21の設定についても、
http://www.bea.hi-ho.ne.jp/cgi-bin/user/byoko/bnews?f=b&p=31680
を確認し
tlbimp C:\WINNT\system32\basp21.tlb /out:basp21Lib.dll
で作成したdllを
<IIS_ROOT>\bin\
に配置し、sample1.aspxで、受け取ったパラメタをそのまま
標準出力するプログラムの動作確認までは行っています。

ところが、aspxから、
c:\package\bin\hogehoge.dll(既存プログラムと考えてください)
を呼び出すexeファイル(binディレクトリに配置)を実行しても結果を
得ることが出来ません。

調べてみたところ、IIS_ROOT配下(binディレクトリ)に既存プログラム
が存在していないためのようです。
実行しようとしているdllは並列階層の他のディレクトリのiniファ
イルを参照しており、既存プログラムのbinディレクトリをIIS_ROOT
配下にコピーしてきても正常に動作させることが出来ません。

ここから先、色々調べてみたのですが何をどのような手順で設定す
れば良いのか、理解できず試行錯誤しています。

gacへの登録、alでのアセンブリの作成等試みてみたのですが、dllの
構成の問題なのかどちらもエラーとなり、作業が出来ません。
gacutilの実行エラーは
  「アセンブリではありません」
なら、アセンブリを作成しようとすると
alの実行結果は
  「インポート中にエラーが発生しました--エラーを特定できません」


手順が悪いのか、そもそも出来ない(ことはないと思いますが)こと
をやろうとしているのかの判断も出来ていない状況です。
どうか、ご教授下さい。
よろしくお願いします。


sample1.aspx(サンプル)

<%@ Import namespace="basp21lib" %>
<%@ Assembly name="basp21lib" %>

<script language="vb" runat="server" Debug="true">
Sub Page_Load(sender as Object, e as EventArgs)

Dim dObj, dRet, rtn_param
Dim basp as Basp21 = new Basp21()
Dim ExecParm, Parm1, Parm2

Parm1 = """-1"""
Parm2 = """7777"""

ExecParm = "c:\app\www\bin\c3.exe"
ExecParm = ExecParm & " " & Parm1
ExecParm = ExecParm & " " & Parm2

dRet = basp.Execute(ExecParm,1,rtn_param)

Response.Write("結果 リターンコード=" & dRet & "<BR>")
Response.Write("結果 出力結果=" & rtn_param & "<BR>")
End Sub
</script>

※追記
 呼び出すDLLに対してのIUSR_xxxの実行/参照権限は設定済み。
 既存プログラムを<WEB_ROOT>\bin配下にコピーしてみたが、別階層
(上位階層)のiniファイル等を参照しており、その参照に失敗するた
め、現在のインストールディレクトリのまま機能の実現をしなければ
いけない。

[ メッセージ編集済み 編集者: JIMMY 編集日時 2004-11-25 05:30 ]

[ メッセージ編集済み 編集者: JIMMY 編集日時 2004-11-25 10:51 ]

[ メッセージ編集済み 編集者: JIMMY 編集日時 2004-11-25 12:08 ]
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-11-25 17:21
Processクラスではなく、basp21を使うのには何か理由があるのでしょうか?
JIMMY
常連さん
会議室デビュー日: 2004/10/26
投稿数: 32
お住まい・勤務地: 東京
投稿日時: 2004-11-25 18:43
引用:

todoさんの書き込み (2004-11-25 17:21) より:
Processクラスではなく、basp21を使うのには何か理由があるのでしょうか?



申し訳もないのですが、Processクラスのことは知りませんでした。
周りでbasp21を使っている事が多い、あとsmtpなんかも実装している
ので容易に使えることから選択していました。

.NETというかWindowsでの開発に関わって1ヶ月でまだまだ勉強不足
のため、くだらない事を質問してしまったようです。
Processクラスについて調べてみて、勉強してみます。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)