none
ASPからのCScriptの実行について RRS feed

  • 質問

  • 初投稿です。はじめまして。

    OSはWindows Server 2008 で、IISは7.x系だと思うので、こちらのフォーラムに書かせて頂きます。

     

    現在、ASP上からvbsファイルの実行ができなくて困っております。

    ASPから実行したいコマンドは、

    CScript.exe hoge.vbs csvのパス パラメータ

    で、vbsの内容は、ローカルのcsvを読込み、DBに書込むものです。

    ※csv自体のセキュリティは、everyoneにフルコントロールをかけることもしてみました。

    また、あまり関係ないとは思いますが、WScript.shellのオブジェクトが生成できなかったので、

    BASP21のExecuteを使用して実行しております。

     

    現象としては、

    ・ASPではネイティブエラーが発生せず、vbsが実行されていない

    ・BASP21の標準出力から確認するとCScriptエラーが発生している

    CScriptエラー: 設定が読み込めませんでした。 (ハンドルが無効です。)

    ・ASPで実行しているコマンドをBATファイルにし、プロンプト上からは実行した場合は、正常に実行できる

    となっております。

    「CScriptの起動」と「コマンドラインからの正常終了」は確認できているので、環境設定の問題ではないかと考えております。

     

    また、IUSERの権限にAdministratorsの付与もしてみましたが、それでも結果は変わらずお手上げ状態です。

    どなたか、このエラーの回避方法をご存じの方がいらっしゃいましたら、ご教授お願いいたします。

    2011年7月13日 6:37

回答

  • セキュリティの観点から、あまりおすすめはしませんが、Classic .NET AppPoolと同じ設定のアプリケーションプールを一個作って、そのプールの実行アカウントを実行権限のあるアカウントに変更してやった上で、アプリケーションの詳細設定からに割り当ててください。
    具体的には、作成したプールの「プロセスモデル」にある「ID」をApplicationPoolIdentityからアクセス権のあるアカウントにしてやれば動くはずです。

    とりあえず、WScript.Shell のRunでCScriptを実行し、そのなかでファイルが作成できることを確認しています。

    【ご参考】
    Application Pool Identities : Configuring Security : Installing and Configuring IIS 7 : The Official Microsoft IIS Site
    http://learn.iis.net/page.aspx/624/application-pool-identities/

    【確認例】

    サーバー側asp

    <% @ Language="VBScript" %>
    <%
    	Response.write("<p>Hello World!!</p>")
    	Set objWsShell = Server.CreateObject("WScript.Shell")
    
    	Response.write(objWsShell.CurrentDirectory)
    
    	objWsShell.Run("C:\Windows\System32\CScript.exe c:\etc\temp\test.vbs")
    	Set objWsShell =Nothing
    
    %>
    

    呼び出されるVBS

     

    Dim objFSO
    Dim objFile
    
    Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("c:\etc\temp\test.txt", 2, True)
    
    Set objFile = Nothing
    Set objFSO = Nothing
    


     

     



    • 回答としてマーク ajitama 2011年7月14日 10:06
    2011年7月14日 8:54

すべての返信

  • ajitama さん、こんにちは
    フォーラム オペレーターの星 睦美です。

    >CScriptエラー: 設定が読み込めませんでした。 (ハンドルが無効です。)
    こちらのエラーが発生した際にはイベントログにエラーログが出力されていませんか?(イベントID など)

    エラーの情報が詳しいほうが回答する方も状況がわかりやすいと思いますので、よろしければお知らせください。


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美
    2011年7月14日 7:53
  • セキュリティの観点から、あまりおすすめはしませんが、Classic .NET AppPoolと同じ設定のアプリケーションプールを一個作って、そのプールの実行アカウントを実行権限のあるアカウントに変更してやった上で、アプリケーションの詳細設定からに割り当ててください。
    具体的には、作成したプールの「プロセスモデル」にある「ID」をApplicationPoolIdentityからアクセス権のあるアカウントにしてやれば動くはずです。

    とりあえず、WScript.Shell のRunでCScriptを実行し、そのなかでファイルが作成できることを確認しています。

    【ご参考】
    Application Pool Identities : Configuring Security : Installing and Configuring IIS 7 : The Official Microsoft IIS Site
    http://learn.iis.net/page.aspx/624/application-pool-identities/

    【確認例】

    サーバー側asp

    <% @ Language="VBScript" %>
    <%
    	Response.write("<p>Hello World!!</p>")
    	Set objWsShell = Server.CreateObject("WScript.Shell")
    
    	Response.write(objWsShell.CurrentDirectory)
    
    	objWsShell.Run("C:\Windows\System32\CScript.exe c:\etc\temp\test.vbs")
    	Set objWsShell =Nothing
    
    %>
    

    呼び出されるVBS

     

    Dim objFSO
    Dim objFile
    
    Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("c:\etc\temp\test.txt", 2, True)
    
    Set objFile = Nothing
    Set objFSO = Nothing
    


     

     



    • 回答としてマーク ajitama 2011年7月14日 10:06
    2011年7月14日 8:54
  • ありがとうございます。

    「アプリケーションプールの実行権限の変更」で、無事動かすことができました。

    今回設定しているサーバはイントラ内にあるので、セキュリティ的には大丈夫そうです。

     

    サーバなどの環境系は全くの素人だったので、非常に助かりました。

    また、こんなに早く解決するとも思っていませんでした。

    動作チェックまでして頂き、お手数おかけしました。

    2011年7月14日 10:21