ISAPIを使ってサーバー上のサービスの再起動を、
クライアントからしようと思っています。
WEBサーバアプリケーションは初めてなので、よくわからないのですが、
再起動用の外部ファイルをいつものように、SHELLから叩こうと思うのですが、
コンパイルがとおりません。SHELLAPIがというより、
SW_SHOWNORMALが引っかかっているのです。考え方が間違っていますでしょうか?
クライアント⇒ISAPIアプリケーション⇒外部再起動EXE⇒結果
⇒ISAPIアプリケーション⇒クライアント
流れはこんな感じで考えているんですが
> コンパイルがとおりません。SHELLAPIがというより、
> SW_SHOWNORMALが引っかかっているのです。
コンパイルできない、ということは Delphi が動作している環境で、ということ
だと思います。SW_SHOWNORMAL は Windows.pas で定義されていますが
uses してますか?
jok様有難うございます!
コンパイルできました。
クライアントのブラウザからサーバ上のDLLを呼びだして
表示結果をとることが出来ました。しかし、
SHELLでサーバー上のEXEを起動してないようでエラーが還ります。
これは、EXEファイルへのパスに問題があるのでしょうか?
mypath:=GetCurrentDir;
mypath:=mypath+'\test.EXE';
ShellExecute(0,'open',pchar(mypath),nil,nil, SW_SHOWNORMAL);
これをACTIONに書いているのですが・・
ちょっと前にも、そしてたびたび話題になることですが、
カレントディレクトリを基準にした操作は危険ですよ。
ParamStr(0) や Application.Exename から EextractFilepath() で
絶対パスを取得して、起動パラメータを絶対パスで指定するようにしてください。
サーバ上に目的のファイルの存在は確認できるのですが、
実行できません。まいったなぁ
クライアント側からサーバーのサービスを再起動するには、
ISAPIなどではなく
TCP/IPソケット通信を考えたほうがいいのでしょうか?
起動してるようです、サーバー上のプロセスに名前があります。
しかし、名前はあるのですが、処理が走っていないようです。
権限などの問題でしょうか?
まず、処理がどのような状態で実行もしくは、エラーが
発生しているかについて
ログ出力などをプログラムにもりこみ
確認しましょう。
すくなくとも、権限について問題があれば、実行させた
プロセスが書き出すログによりわかると思います。
>>ふじっこ様
アクセス拒否でした。IUSR,IWAM_USRなど、思い当たるところに、権限を与えまくっているのですが、まだうまくいきません。
しかし、なんか糸口がつかめそうです・・・
PINGやIPCONFIGなどは問題ないのですが、NET STOPなどはアクセス拒否です。
もう少し粘ってみマス
もう少し、情報をいただきたいので、質問を(m_m)
外部実行させるEXEの目的をもう一度整理しましょう。
NET STOPコマンドは、サービス停止系ですよねt
WebサーバーPC内部のサービス・環境まで
QQ様が作成しようとしている外部EXE呼び出し機能で
コントロールさせたいのですか??
※セキュリティの観念から言いますと
むやみやたらに権限与えるのではなく
一つ一つ検証したら、必ず元に戻しましょうねtt
>>ふじっこ様
返事が送れて申し訳ありません・・
はいコントロールしたいです。
私どものオリジナルサービスの再起動をクライアントからかけたいのです。
はいセキュリティは気をつけます
返事がおくれまして、申し訳ありませんでした。
私どもの採択した解決方法ですが
結局ISAPIを採用せず。
ASPを使用しました
ASPには、サーバーサイドにあるCOMモジュール(ActiveXオブジェクト)であれば
呼び出しおよび実行可能な機能があります。
ASPにてサーバーPCにてさせたいインタフェースを構築し
ASPから呼び出すCOMモジュールにてサーバーPC内部構成を
変更・再起動するという方法を選びました。
結果、ISAPI権限も変更することなく、
Webインタフェイス部分のセキュリティを考慮するだけと
なりましたので簡素ですみました。
作成手順は以下の手順です
・CreateProcessを盛り込んだActiveXオブジェクト作成
および、レジストリに登録
このオブジェクト内部にて、サーバー内部の各制御する
コマンドをメソッドとして定義
・ASPにて
サーバーサイドからサーバー内に登録している先ほどのオブジェクト
を呼び出しメソッド実行
以上です。
ツイート | ![]() |