環境はWindows2000Server+IISです。
コマンドラインで検証をしておりZIP.VBSを使用して検証をしております。
コマンドラインから
CScript //B ExtractZIP.VBS ZIPファイル [展開先フォルダ\]
としたのですが、応答が帰ってきませんでした。
//B のオプションを外しても同様でした。
+Lhacaをインストールしてみて再度試してみたのですがこれも同様の結果でした。
実現したい内容は、Webページよりボタンをクリックする等のアクションで
ZIPファイルを解凍することです。
コマンドラインから実行ができたら、ASPよりシェルオブジェクトを使って
コマンドラインに命令を投げればいいかと思っているのでまずはコマンドラインで
検証をしたいと思っています。
※コマンドラインからZIPファイルが解凍できて、その際、ダイアログなどの表示が出なければOKです。
解凍後のフォルダなども開かずコマンドラインのみで動作か完結する必要がございます。
情報お持ちの方がいらっしゃいましたらお教えください。
うろ覚えですがASPからVBSやGUIのアプリケーションの実行はできなかった思います。
ただし、メッセージボックス等が表示されないよう改修し、BASP21で実行を掛ければ大丈夫かもしれません。
それよりも
試していませんが、ZIP.CMDというのはいかがかと思います。
解凍系のねたをaspでやったことはないので、あくまで推測で申し訳ないです。
vbsとaspの実行権限が違うため、vbsで動いたからといってaspで動く保証はないです。
aspが動作するWindowsサーバにおける「インターネットゲストユーザー(IUSR_xxxxxx)」が、解凍スクリプト内で呼び出すプログラムに対する実行権限を与えてあるか、確認してはいかがでしょうか。 ファイルのプロパティで、セキュリティのところで、確認できるはずです。 このとき、vbsだけじゃなく、スクリプトから呼び出す可能性のある.exeや.dllや.ocx全てついてチェックしてください。
あと、解凍スクリプトから解凍の仕方をしっかり制御するには、APIがはっきりしている下記DLLあたりがお勧めです。 下手なプログラムだと、カレントディレクトリに勝手に解凍するかもしれませんし。
Common Archivers Library: UNZIP32.DLL
権限の問題はある程度問題ないと考えています。使用者が限られているので、IUSRのアカウントにはある程度自由度の高い権限設定をする予定でおります。
UNZIP32.DLLでもいいのですが、質問としてはコマンドラインからZIPを解凍したいということなので、その趣旨に合った解答をいただければと思います。
ZIP.VBS.ZIPに含まれるExtractZIP.VBSをチェックしてみたのですが、いくつか気になることがあります。
「Scripting.FileSystemObject」はasp内でも使えますが、「Shell.Application」は使えないかもしれません。 レジストリエディタで検索するとファイルとしての実体はsystem32フォルダにある「SHELL32.DLL」なので、こいつに「読み取りと実行」のアクセス権があるかどうかを確認しましょう。
「InternetExplorer.Application」も使えないだろうなぁ、「読み取りと実行」のアクセス権を与えても動くかどうか。
あと、asp内ではWScriptオブジェクトやは使えないはず。 ゆえに、このExtractZIP.VBSを無編集で使うのは相当厳しい気がします。 コード編集して、最小限必要なコードをaspに取り込んではいかがでしょうか。
インターネットゲストユーザー(IUSR_xxxxx)でなく、Windowsに普通にログオンできるPower User権限のあるユーザーを別途作成して、IIS/ASPをゲストユーザーじゃなく実ユーザーでやるのも手かもしれません。
LZHなら、下記のページのオートメーションサーバーを使えばいけそうなんですけどね、Unzip32.dllをオートメーションサーバーにラップするのを作れれば、簡単になるのですが。
Unlha Automation Server(Windows95/98/Me / ユーティリティ)
なるほど。なにやら難解そうですね。
そうすると、VB等でCOMを作ってそれをASPから実行させるか、常駐で監視するプロセスをつくってASPでフラグファイルのようなものを作って、それを常駐プロセスで感知して処理を実行というようなことになりそうですね。もう少し調べてみます。
ありがとうございました。
ZIP解凍はこちらのスクリプトを使用するのでしょうか。
http://www.vector.co.jp/soft/winnt/util/se355605.html
上記はXP対応となっており、Win2000では動作しないようです。
スクリプトを読んでみたのですが、OSに標準で備わっているZIP解凍機能を利用していることがわかりました(2000には標準で解凍機能は無い)。
たとえXPで動作させるにしても、Lhacaなどアプリケーションをインストールしてしまうと(OS標準の解凍機能が使われなくなり)、このスクリプトは動作しなくなります。
回答#1にあるZIP.CMDも中身はZIP.VBSと同じなので、同じ理由で動作しません。
----
UNZIP.exeが使えるかもしれません。下記ダウンロード
http://www.csdinc.co.jp/archiver/app/dosp/zuz.html
コマンドラインで
UNZIP
とだけ打てば、HELPがでます。
----
UNZIP32.DLLが必要な場合は、下記をダウンロードしてください。
http://www.csdinc.co.jp/archiver/lib/unzip32.html
----
具体的な使用法としては、
UNZIP C:\AAAA.ZIP C:\BBBB\ CCCC.txt
AAAA.ZIPは、解凍したいファイル
C:\BBBB\は、解凍先。末尾に円記号が必須。
CCCC.txtは、取り出したいファイル。省略すれば、全部。
※ファイル名に空白を含む場合はダブルクォーテーションで囲む。
その他細かいことはHELP見てがんばってください。
まさにやりたかったことはこれでした。出来ました。ありがとうございます。
ASPからVBSは実行したことがあるので大丈夫かと思います。
GUIのアプリケーションは実行できないかもしれないのですね。
メッセージボックスに関してはCScriptで動かせば出ないですので大丈夫かとは思います。
ZIP.CMDは検証の価値がありそうなので試してみます。
ありがとうございました。