locked
ASP+VBScriptでサーバ側のexeを起動させたいが'800a0046' がでる RRS feed

  • 質問

  • Windows2003のIIS6.0にて

    ASP+VBScriptからexeを起動させたいのですがエラ-が発生してしまいます。

    ■ソース

    Set WshShell = CreateObject("WScript.Shell")
     cmd = "E:\Inetpub\wwwroot\aaa\bbb\ccc.exe"
     rc = WshShell.Run(cmd, 0, False)←ここでエラー

    ■IE上のエラー画面
    Microsoft VBScript runtime エラー '800a0046'

    Permission denied


    かなり調べてIISの権限不足かと考えているのですが、現時点で行った変更は

    ・ccc.exeにEveryOne付与

    ・匿名アクセスを有効(ISR_***)

    ・exeのフォルダのWeb共有をON


    アドバイスいただきたく、宜しくお願い致します。

    2017年8月22日 6:54

回答

  • Server でログオンしている状態と、その画面に表示したいと言うことですか…?

    基本的には、セッション分離という考え方によって、ログオンしているユーザーアカウントと異なるユーザーアカウントで実行されているプログラムは、自分が見ている画面(セッション)に表示されることがありません。
    また、Web サーバーは通常、誰もログオンしていない状態で実行していることが大半であるため、ログオンしているセッションにウィンドウ(ダイアログなど)を表示したいというニーズも少なく、サンプル・解説は見つけづらいかと思います。

    IIS に関連する Windows サービスの設定で「デスクトップとの対話を有効にする」みたいなことをやればできるかもしれませんが…。

    2017年8月22日 12:32

すべての返信

  • エラーメッセージから推測するに、IISの実行ユーザーであるNetwork Serviceが、bbbフォルダに対するアクセス権があるか確認してみて下さい。

    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2017年8月22日 7:26
  • ご返答ありがとうございます。

    トライしたところ、エラーは消えたのですが

    サーバー側でタスクマネージャーの「プロセス」にユーザー名「IWAM_***」として

    残った状態でして、EXEが起動していない?ようでした。

    EXEはテストで単純にMSGBOXを起動するだけのものなのですが、サーバ上で

    このMSGBOXを表示(EXEのPG実行)させるためのアドバイスをいただけませんでしょうか?

    宜しくお願い致します。

    2017年8月22日 10:22
  • Server でログオンしている状態と、その画面に表示したいと言うことですか…?

    基本的には、セッション分離という考え方によって、ログオンしているユーザーアカウントと異なるユーザーアカウントで実行されているプログラムは、自分が見ている画面(セッション)に表示されることがありません。
    また、Web サーバーは通常、誰もログオンしていない状態で実行していることが大半であるため、ログオンしているセッションにウィンドウ(ダイアログなど)を表示したいというニーズも少なく、サンプル・解説は見つけづらいかと思います。

    IIS に関連する Windows サービスの設定で「デスクトップとの対話を有効にする」みたいなことをやればできるかもしれませんが…。

    2017年8月22日 12:32
  • ご返信ありがとうございます。

    ユーザーアカウントが違うと、プログラム自体は起動できないのですね。

    デスクトップとの対話を有効にする、について調べてみましたが、その前に基本知識から勉強いたします。

    2017年8月23日 2:54
  • ユーザーアカウントが違うと、プログラム自体は起動できないのですね。

    正確に言うと、起動はしているけど「(モニターでは)見えない」です。
    (タスクマネージャーで exe の名前が見えていることから、起動している)
    2017年8月23日 13:54
  • 質問に対する直接の回答ではないです。

    > EXEはテストで単純にMSGBOXを起動するだけのものなのですが、サーバ上で
    > このMSGBOXを表示(EXEのPG実行)させるためのアドバイスをいただけませんでしょうか?

    「テスト」ということは開発時・保守時のデバッグの際何かを MSGBOX に表示させたいということと理解していますが、「サーバー上で」ということが必須でなければ開発マシンでデバッグしてはいかがですか?

    自分自身は試したわけではないので何ですが、以下の記事によると IIS Express を使って Visual Studio からデバッガをアタッチしてデバッグできるそうです。

    VS2010とIIS ExpressでClassic ASPのデバッグ実行をする方法
    http://kiyokura.hateblo.jp/entry/20120419/p1


    クラッシック ASP は事情が違うかもしれませんが、ASP.NET の場合は IIS のワーカープロセスがユーザー対話モードで実行されていない(Environment.UserInteractive は false になる)ので、ユーザーが対話するためのグラフィカルユーザーインターフェイスが存在しないとのことで、MessageBox は表示できません。

    IIS Express を使った場合は話が違って、Visual Studio からデバッグすると、 IIS Express のワーカープロセスは Visual Studio を立ち上げたユーザーのアカウントで動きます。なので、Environment.UserInteractive は true になり、MessageBox は表示されます。

    ひょっとしたら、クラッシック ASP でも同様な事情があるのかも。(単なる想像で未検証・未確認です)

    2017年8月24日 1:10