- PR -

Windows Server 2003+ASPでのCOM実行エラーについて

投稿者投稿内容
ita
常連さん
会議室デビュー日: 2006/10/10
投稿数: 25
お住まい・勤務地: 兵庫県
投稿日時: 2006-10-13 12:11
いつもお世話になっています、itaと申します。
又、質問で恐縮なのですが、よろしくお願いします。
Windows Server 2000環境で運用していたASPアプリケーションをWindows Server 2003に移行
した際に、COM(BASP21)でDOSコマンドを実行する処でエラーが発生し実行できなくなってしまいました。
DOSコマンドは単純なDIRコマンドでフォルダー情報をファイルに出力するというものです(下記参照)。
2000の時には問題なく実行していたのに2003でだけダメみたいです。
又、コマンド自体はサーバー上のコマンドプロンプトで実行すれば正常に動作しますのでコマンド自体の問題ではないようです。

いまさらながらWindows2003での経験が少なく、非常に困っています、よろしくお願いします。

■環境
・Windows Server 2000(正常運用)
Server :Windows Server 2000(SP4)
ASP:Legacy ASP
BASP21:2,3,2,11版

・Windows Server 2003(移行)
Server :Windows Server 2003(SPなし)
ASP:Legacy ASP
BASP21:2,3,2,11版

■ソース
※DもEドライブもローカルドライブです。
<% @ Language="VBScript" %>
<html>
<head>
<title>TestBASP21テスト</title>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=x-sjis">
</head>
<BODY>
<%
Dim bobj, rc, stdout, cmd
cmd = "cmd.exe /c dir D:\ /S /B /A-D > E:\test.txt"
response.write("BASP21テスト<BR>")
response.write("CMD=" & cmd & "<BR>")
Set bobj = server.createobject("Basp21")
rc = bobj.Execute(cmd, 1, stdout)
Set bobj = Nothing
response.write("送信レスポンス rc=" & rc)
%>
</BODY>
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2006-10-13 12:31
普通に考えるとアクセス権っぽいですが、、、

すぐに試せる気休め(失敗するかもしれないが)で・・・
(簡単に試せる、しかし正解ではないかも)
Cドライブにtempというフォルダを作ってみると
動いたりしませんか?

Basp21メソッドのW3Getでは、Cドライブのtempという
フォルダがないと確実に失敗します。

なお、フォルダ情報を取ってテキストに吐き出すだけなら、
Scripting.FileSystemObjectを使用することが
抜本的な解決方法だとは思いますが。その点はさておき。

ita
常連さん
会議室デビュー日: 2006/10/10
投稿数: 25
お住まい・勤務地: 兵庫県
投稿日時: 2006-10-13 12:46
platiniさん

回答ありがとうございます。
(platiniといえば、フランスの将軍ミシェル・プラティニですか?私も大好きなプレーヤーです。それはさておき。)

> Cドライブにtempというフォルダを作ってみると動いたりしませんか?

残念ながら、既にc:\tempというフォルダは存在しました。(この問題で意識的に作ったわけではありませんが)

> Basp21メソッドのW3Getでは、Cドライブのtempという
> フォルダがないと確実に失敗します。

そうですか!w3getも他システムで使用しますので参考になりました。ありがとうございます

> なお、フォルダ情報を取ってテキストに吐き出すだけなら、
> Scripting.FileSystemObjectを使用することが
> 抜本的な解決方法だとは思いますが。その点はさておき。

既にあるソースをそのまま使いたくて(ソースを変更したくなく)この方法で解決したいのですが。最後の手段にScripting.FileSystemObjectはとっておきます。
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2006-10-13 18:11
引用:

platiniといえば、フランスの将軍ミシェル・プラティニですか?
私も大好きなプレーヤーです



⇒その通りです。

さて、Windows2003ServerのIISは、IIS6です。
http://msdn2.microsoft.com/ja-JP/library/3t52s799.aspx

Windows2000は IIS Ver5です。

アクセス権周りでなければ、このあたりの違いのせいかな・・・

IIS5.0 プロセス分離モードにしてみてもだめですかね?

アクセス権(作成したテキストファイルの
データを書き込むフォルダ、ディレクトリを読み取る対象ディレクトリ)は
例えば1回EveryOneに対して開放してみるなど、
別途確認してみてくださいね。


[ メッセージ編集済み 編集者: platini 編集日時 2006-10-13 18:28 ]
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2006-10-13 18:28
http://www.microsoft.com/japan/serviceproviders/technical/060726.mspx
の中の
引用:

クラシックASP を使用する FSO を保護することはできますか。つまり、特定のフォルダ以外からのファイルの読み取りや書き込みを禁止することは可能でしょうか。信頼レベルが Medium の ASP.NET では可能なように。


のQAも参考になるかも
ita
常連さん
会議室デビュー日: 2006/10/10
投稿数: 25
お住まい・勤務地: 兵庫県
投稿日時: 2006-10-13 18:41
platiniさん

回答ありがとうございます。

> IIS5.0 プロセス分離モードにしてみてもだめですかね?

だめでした。(がっかり)
IIS6上でCOMからDOSコマンドの実行というのは、単純に許可されていることなので
しょうか?IIS5から6になったことで、このあたりの制限が厳しくなったのでしょうか?

> アクセス権(作成したテキストファイルの
> データを書き込むフォルダ、ディレクトリを読み取る対象ディレクトリ)は
> 例えば1回EveryOneに対して開放してみるなど、
> 別途確認してみてくださいね。

実は、これも確認済です。ダメでした。

> http://www.microsoft.com/japan/serviceproviders/technical/060726.mspx

この情報も参照してみます。
いろいろありがとうございます。
minminnana
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 246
お住まい・勤務地: 盛岡
投稿日時: 2006-10-13 19:23
試しに、cmd.exeファイルへのアクセス権をusersに付けてあげるとどうでしょう。
ハル
常連さん
会議室デビュー日: 2003/02/12
投稿数: 22
投稿日時: 2006-10-14 11:19
こんにちは。

Windows 2003 と Windows 2000 では cmd.exe に対するアクセス許可が変わっていたと思います。(cmd.exe というより system32 フォルダだと思いますが)

ですので、IIS の認証方式にも因りますが、ASP が実行されているスレッドの実行アカウントに cmd.exe の実行権限を与えてあげれば動くのではないかと思います。
(匿名認証では既定で "IUSR_マシン名" が使われます)

HTH

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