WIN2003
ASP IIS5.0分離モード
イントラネット
基本認証モード
ASPから objwshshill.run(圧縮コマンドおよびパラメーター)
でLHA32.EXE(UNLHA32.DLL)を呼んで圧縮し、
それを自信のPCにダウンロードしてます。
ユーザーにアドミンをつければ正常にLHA32が
動いてLZHファイルが作れますが、アドミンを
はずすとLZHファイルが作成できません。
SHELL発行後、ERR.NUMBERの番号は70で
書き込みができません。というエラーが
でます。
圧縮するフォルダー等、ドメインユーザーの
権限を付加してます。(とりあえずフルコントロール)それでもエラーが帰ってきます。
よろしくお願いします。
http://www.microsoft.com/japan/
マイクロソフト - ホーム
URLはダミーです。
XP以降のWindowsではファイル関連の権限の扱いが変更されていて、古いプログラムでは、アドミニストレーター権限で実行しないとファイルのオープンができないことがあります。(典拠を失念してしまいましたが、MSのドキュメントに記述されていたと思います。)これは、LHA32.EXEの仕様であると考えるしかないのではないでしょうか。
ごめんなさい。問題の解決にはならないですよね... onz
http://support.microsoft.com/default.aspx?scid=kb;en-us;111545
INFO: Security Context of Child Processes
1.を回答した者です。
回答をしたあと、ドキュメントを探してみたのですが、見つかりませんでした。思い違いをしていたかも知れません。
不安になったので、テストしてみました。といっても、2003の環境がないので、XPでテストしました。
結果、少なくとも、最新のLHA32.EXE(1.0.6.0)とUNLHA32.DLL(1.97.1.4)の組合せでは、XP環境で問題なくファイル作成ができるようです。
1.の回答は、何の解決にもならず、あまつさえ間違っていたっぽいです。いい加減な回答をしてしまい、本当に、ごめんなさい。onz
これだけだと、あまりにも回答になってなさ過ぎるので、考えられることを書いておきます。
まず、この問題ですが、コンソールや普通のWSHなどからコマンドを実行した場合には正常に動作するのに、ASPから実行した場合だけ、失敗してしまうということなのでしょうか?
だとすると、ASPを実行しているサーバープロセスから、正しく子プロセスに権限が引き継がれていないとか、そういう感じの問題っぽいですが、そうでないとすると、実行しようとしているコマンドに問題があるとか、そういう話になりますよね。いやまぁ、その程度の問題だったら、わざわざ質問したりはしないかなとも思うのですが、私の環境では、WSHのWScript.Shell.Run()から直接、LHA32を呼ぶと、コマンドライン引数の受け渡しが上手くいかないようでして、.cmdファイル(バッチファイル)を作り、その中で、LAH32を起動することにして、Shell.Run()からは、.cmdファイルを実行するという方法で、この問題を回避しました。
えらそーに回答しておきながら、お恥ずかしいのですが、実のところ、私、ASPを使ったことがありません。ただ、IISって、子プロセスに自分のプロセス権限をそのまま引き継がせたりはしないですよね?(確か、いくつかの実行モードを選択できたような...)
何か、私ってば、すごくレベルの低いことを書きまくってます?
IISアプリケーション(ASPスクリプト)に対して、バイナリプログラム(.exe)の実行可能権限を設定していて、かつ目的のフォルダに対するフルコントロール権限も付与しているにもかかわらず、ファイルが作成できないというエラーが返ってくるということなのでしょうか?
だとしますと、やはり私なんぞには、お手上げです。^^;
ちなみに、IIS5.0って、Windows Server 2003の上で動くことは保証されているのでしょうか? 2003だと、標準のIISのバージョンは6.0ですよね? なんて、これも、一応の確認です。^^; 全くもって余計なことを書いているかも知れませんが、もしかしたら何かの参考にでもなるかなぁとも思いまして...
いずれにしましても、私のせいで、質問者様が無駄にしてしまわれたポイントは質問終了後に補填させて頂こうと思います。いえ、それで済まそうというわけじゃないですよ。自戒しています。本当に、ごめんなさい。
IIS6.0標準だと、.NETですが、下位互換のASP用
として、IIS5.0分離モードの設定をすれば従来の
ASPでまわせます。
ただ、その設定がうまくいってないんじゃないかと
考えてます。
いまんとこ、neyeさんと同じようにしてLHA32をバッチ読みにして読みだしていますが、うまくいきません。とりあえず、SQL2000のXP_cmdshillというストアード(これはオペレーティングコマンドを発行できるストアード)から起動するとうまく動きます。
まあ、このストアードはアドミンと変わらない ので
ポイントはいいですよ。150ポイントでかいとう
がえられるならば、安いもんですよ。
http://www.csdinc.co.jp/archiver/
Common Archivers Library
ulha32.dll ではアーカイブを作るときに作業ディレクトリに一時的にアーカイブを作った後にターゲットのパスにコピーします。
この作業ディレクトリへのASPが動作しているユーザでのファイル作成の権限が無いんじゃないでしょうか?
作業ディレクトリは
1 : -w<ディレクトリ> で指定されていれば,そのディレクトリ。
2 : TEMP が設定されていれば,そのディレクトリ。
3 : TMP が設定されていれば,そのディレクトリ。
4 : GetWindowsDirectory() で得たディレクトリ下に TEMP ディレクトリを(なければ) 作成し,そのディレクトリを使用。
5 : ディレクトリの作成が行えない場合は,4 で得たパスのルートを使用。
6 : GetWindowsDirectory() がエラーだった場合はカレントディレクトリを使用。
です。
むやみにシステム関連のディレクトリに書き込む権限を付けるわけには行きませんから、コマンドラインスイッチの -w で書き込み権限のあるフォルダーを指定するか、-w0 で作成する書庫と同じディレクトリを作業ディレクトリとしてみてはどうでしょう?
みなさんはそれに変わる方法とかMSのここのドキュメントだよ。っていのがわかったら教えてほしいので
ですが、MSで探してみましたがさがしきれません。