2012-01-24 28 views
2

Windows 2008 R2(.NET Framework 4.0、IIS 7.5)にASP.NETアプリケーションがあり、コンソールアプリケーションを実行したいウェブページのボタンをクリックするとここでは、コードは次のようになります。ASP.NETアプリケーション(IIS 7,5)内からコンソールアプリケーション(.exe)を実行する

protected void btnUpdate_Click(object sender, EventArgs e) 
    { 
     string fileLocation = @"D:\DTDocs\App_Code\LoadDTDocsXML.exe"; 
     ProcessStartInfo oStartInfo = new ProcessStartInfo(); 
     oStartInfo.FileName = fileLocation; 
     oStartInfo.UseShellExecute = false; 
     Process.Start(oStartInfo); 
} 

私は(その内部IIS付き)のVisual Studio 2010内からASP.NETアプリケーションを実行すると、コンソールアプリケーションは、[OK]を実行します。しかし、VS 2010の外でASP.NETアプリケーションを実行すると、エラーは発生しませんが、コンソールアプリケーションは自分の仕事をしません(ディスク上にxmlファイルを作成する必要があります)。 私は問題がIIS 7.5の設定だと思いますが、私は自分のコンソールアプリケーションに関係するフォルダへのアクセス権をどのアカウントに与えなければならないのか正確にはわかりません。 IIS 7.5では、物理パスの資格情報に設定しました。特定のユーザー =私のWindowsアカウントですが、問題は解決しません。おかげさまで

+0

どのように動作しないのですか? – Basic

答えて

1

ASP.NET Dev Serverは、現在のユーザーの資格情報(あなたです)で実行されます。 IIS 7.5では、アプリケーションプール設定で指定されたユーザー(通常はApplicationPoolIdentity(ファイルアクセス許可の構成時にユーザー "IIS AppPool \ [ApplicationPoolName]"と呼ばれる)の下でASP.NETアプリケーションが実行されます。また、「ネットワークサービス」(IIS 7.0の既定値)に変更することもできます。

どのIDがアプリケーションプール用に構成されているかを確認し、このユーザーに必要なアクセス許可を与えてください。

+0

アプリケーションプール用に設定されたIDがカスタムユーザー(サーバーの管理者であるWindowsアカウント)に設定されていて、フォルダに対して明示的なアクセス許可を与えました。私はすでにユーザー "IIS APPPOOL \ DefaultAppPool"で試してみましたが、何も変更されていません。しかし、アプリケーションのPhysical Path Credentialがどの役割を果たしているのか分かりません(今はアプリケーションプールと同じアカウントに設定されています)。 –

1

私が見る最初の問題はセキュリティ/ファイルアクセスです。 VS内から実行している場合、サーバーとクライアントは資格情報で同じマシンです。テスト/運用環境で実行すると、サーバーとクライアントは物理的に異なるマシンであり、IISは制限付きのアクセス許可でWebサイトを実行します。したがって、セキュリティのためIISがD:...にファイルにアクセスできないという非常に良い機会があります。

次の問題は、Webサイトからコンソールアプリケーションを実行しています。コンソールは、htmlやWPFと同じようなUIの別の形式です。個人的に私は(別の選択肢がない限り)Webからコンソールを実行しません。私はAPIをWebアプリケーションに統合します。 2つのUIが同じロジックを共有しています。

+0

私は自分のWebアプリケーションでフォーム認証を使用し、物理パスの資格情報(IISで)を特定のユーザー(サーバーの管理者である私のWindowsアカウント)に設定しました。私が困惑しているのは、VSではすべてが問題なく、アプリケーションがコンソールアプリケーションを正常に起動できるようにIIS 7.5を設定する必要がないということです。 私は(少なくとも私のために)それほど単純ではないので、なぜ私はそのように問題を解決しようとしているので、Webアプリケーションでコンソールアプリケーションを書き直すのを避けたいです。 –

+0

は、「コンソール」ロジックをAPIにカプセル化し、次にweとコンソールの両方でAPIを参照します。コードDRYを維持する。 –

+0

ありがとう、私はあなたの助言に従うと非常に便利です。 –

2

他の2つの回答に追加するだけですか - 本当にはウェブサーバーからexeを実行する必要がありますか?

私は過去にそれをやらなければなりませんでした。これはほとんどの場合、最後の手段の選択です - あなたのセキュリティをかなり弱める(あなたのシステムで実行可能ファイルを実行するためには誰もがコードに単一の欠陥)、他の問題のホストがあります(Webサーバーはサーバーに「ログオン」されていないため、デスクトップはなく、偽装はa $$の本当の痛みです。などのWebサーバに異なる権限で実行可能)を実行しようとして

あなたの目標を達成するために、他の方法がある場合、それはほぼ確実に簡単になるでしょう。

我々が行ってきましたオプションを持っていることでしたWCFを使った新しいアプリウェブサーバが通信できるポイント。だから、誰かがボタンを押すと、WSコールはWCF経由で私たちのアプリケーションを呼び出し、それがさまざまなコマンドを実行するように指示します。このようにして、あなたは:

  • ウェブとコンソールコードの間に明確な分離があります。
  • 危険なコンソールアプリはウェブサーバ&その逆をテイクダウンしません
  • コンソールアプリが長時間実行された場合、これはあなたが殺さないように、ウェブサイト/コンソールアプリのリリースをずらすことができますあなたがいくつかのCSSを元に戻して公開する必要があるからです。
  • 大きなセキュリティ上の利点 - Webサーバーは、侵害されたとしても実行可能ファイルを実行できません。
  • WCFアプリケーションは、実行前に有効であるかどうかを判断する要求を厳密に調べることができます。

誰かが悪意のある動作する場合に何が起こっているか、あなたがそれを行うがあることに注意してくださいとプロセスをキックオフすることができ、彼らはおそらくほぼゼロの努力でのDoSあなたは可能性 - このメソッドはTIGHTロックダウンされていることを確認します。

編集:上記のコメントを読んで、私はあなたが "デスクトップ"の問題​​にぶつかっていると思います。サーバーから実行可能ファイルを起動すると、ログオンしているユーザーのデスクトップにはIISからアクセスできないため、その逆もありません。これは、WindowsサービスでGUIを使用するという問題に非常に似ています。

Thisでもよい。

+0

私は、VSを使用してWebアプリケーションを実行するときにコンソールアプリケーションが実行され、VSを使用してIISを使用していないときはコンソールアプリケーションが実行されることがわかります。あなたの答えをありがとう、私はあなたの視点に感謝します。 –

+0

IISがアプリケーションを実行している可能性は非常に高い - あなたはそれを見ることはできません。アプリは何をしていますか?どこかでテキストファイルに書き込むだけの単純なアプリケーションを作成してみてください。 – Basic

+0

コンソールアプリケーションは、フォルダの構造と内容(仮想ディレクトリ)を含むun xmlファイルを作成します。だから私は、コンソールアプリケーションが実行されているかどうかを確認することができます。私はあなたの提案を簡単なアプリケーションを作成しようとします。どうもありがとう。 –

関連する問題