- PR -

IIS6.0でのASP実行ユーザー

投稿者投稿内容
odik
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 69
投稿日時: 2005-12-27 13:31
<システム構成>
OS:Windows2003 Server
webサーバ:IIS6.0
開発言語:ASP

<質問>
ASPにてサイトを構築しています。
ASPにて生成した画面でボタンを押下すると、
特定のディレクトリにファイルを生成するように
プログラムにしておりますが、該当ディレクトリに
ファイルが生成できません。
(具体的には以下のようになります。
 aspのソース中に、以下のコマンドを実行するようプログラムした。
   echo 'test' > D:\TestSystem\TMP\test.txt
 尚、上記コマンドは、aspからの実行で失敗するが、
 コマンドプロンプトからだと正常に実行できる。)

おそらく、ディレクトリへの権限付与の問題だと思い、
色々試しましたが、うまくいきません。
(具体的には以下のようになります。
 D:\TestSystem\TMPに以下のユーザにて読取/書込権限を付与した。
  ASP.NET
  LOCAL SERVICE
  NETWORK SERVICE)

また、以下の環境だと正常に動作することが確認できています。
 OS:Windows2003 Server
 webサーバ:IIS5.0

その他必要な情報等ございましたら、お申し付け下さい。
ご教授、宜しくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-27 14:31
引用:

kidoさんの書き込み (2005-12-27 13:31) より:

ASPにて生成した画面でボタンを押下すると、特定のディレクトリにファイルを生成するように
プログラムにしておりますが、該当ディレクトリにファイルが生成できません。

aspのソース中に、以下のコマンドを実行するようプログラムした。
echo 'test' > D:\TestSystem\TMP\test.txt


あれ? FileSystemObject で CreateTextFile じゃないんですか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
odik
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 69
投稿日時: 2005-12-27 15:14
じゃんぬねっと様、
ご返信有難うございます。
ご指摘の通り、以下のプログラムだと該当ディレクトリに
正常にファイルが生成されます。
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CreateTextFile "D:\TestSystem\TMP\test.txt"

もともと、以下のようにプログラムしており、うまくいきません。
strCmd = "cmd /c echo 'test' > D:\TestSystem\TMP\test.txt"
Set objShell = Server.CreateObject("WScript.Shell")
iRet = objShell.Run(strCmd, 0, True)

このプログラムで正常に動作できましたら、次に上記のstrCmdを
zipコマンドを用いた圧縮ファイル生成のコマンドに変更したいと
考えております。つきまして、その手始めにobjShell.runで
ファイルの生成を試みました。

ディレクトリへのアクセス権ではなくobjShell.Runでつまづいて
しまっているのでしょうか?何か特別な設定が必要なのでしょうか?
何かお気付きの点がございましたら、ご教授下さい。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-27 16:56
引用:

kidoさんの書き込み (2005-12-27 15:14) より:

ディレクトリへのアクセス権ではなくobjShell.Runでつまづいて
しまっているのでしょうか?


戻り値である iRet にはエラーコードが含まれると思いますが、
その原因は、kido さんの考えているものと一致していますか?

何かがうまくいかない時の手がかりは、エラーの詳細です。
でないと想像になってしまいます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
odik
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 69
投稿日時: 2005-12-27 21:54
じゃんぬねっと様、ご返信有難うございます。仰るとおりですね。

少しプログラムを変更した上で、エラーコードを調べようとしました。
(strCmdを変更しました。)

strCmd = "c:\Windows\system32\ping.exe 127.0.0.1 > D:\TestSystem\TMP\test.txt"
Set objShell = Server.CreateObject("WScript.Shell")
iRet = objShell.Run(strCmd, 0, True)
If iRet < 0 Or Err.Number <> 0 Then
'エラー内容をログへ出力
End If

iRet及びErr.Numberを調べました。
iRet=0
Err.Number=70

ネットで色々探してみたのですが、Err.Number=70というのものが
何を意味しているのかがよく分かりませんでした。
調べる方法をご存知の方がいらっしゃいましたら、
ご教授下さい。
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-12-27 22:14
Err.Descriptionでエラーの内容が取れると思いますよ。

#確か70番は"書込みできません"だったかな?
#想定通りなんですかね。
odik
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 69
投稿日時: 2005-12-28 09:10
でっち6号様、ご返信有難うございます。
仰るとおりErr.Descriptionは「書き込みできません」です。

書き込み先のディレクトリには読取/書込権限を付与しており、
想定外です。
(具体的には以下のようになります。
 D:\TestSystem\TMPに以下のユーザにて読取/書込権限を付与した。
  ASP.NET
  LOCAL SERVICE
  NETWORK SERVICE)

何かお気付きの点がございましたら、ご教授下さい。
リスボン
会議室デビュー日: 2007/11/14
投稿数: 3
投稿日時: 2007-12-08 17:14
かなり古い投稿ですが、自分も悩んだので投稿します。

cmd.exeに関連した処理実行の場合にIIS6経由の場合、
既定のACL上では禁止。(IUSR_xxxx)に権限なし。

2003+IIS6の環境で確認したところ、cmd.exeに対して
IUSR_xxxxに実行権限を与えたところBATの起動はでき
ました。

ただ、方法としてはあまりおすすめはできません・・・

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