コードを非同期で実行して.exeファイルを実行する

私は、データベースから取得されたtxtファイル情報を書き込むコンソールアプリケーションを持っています。今までは、コンソールアプリケーションによって生成された実行可能ファイルを手動で実行しています。

今、私のWebアプリケーションから.exeの呼び出しを自動化する必要があります。その結果、特定の条件がコード内で発生するたびに、論理が「火と忘れ」の.exeを実行できます。

私の目標は:

1)コンソールアプリケーションの実行によってユーザーが影響を受けてはならない(SQLクエリとtxtファイルの生成には約3〜5分かかることがある)ため、別のプロセスに委任された「火災と忘れ」のロジック。

2)実行ファイルは手作業で実行されることがあるため、別の動作をするリスクを回避するために、すべてのロジックを1か所に配置することをお勧めします。

これを達成するために System.Diagnostics.Process を安全に使用できますか?

System.Diagnostics.Process cmd = new System.Diagnostics.Process();
cmd.Start("Logger.exe");

Does the process automatically ends or do I have to set a timeout and explicitly close it?
Is it "safe" in a web application environment with different users accessing the web application let them call the executable without the risk of concurring accesses? Thanks.

編集: ヒントのために、より明確にするために組み込みのクラスを使用するように変更されました。

0
CommandLineProcessはカスタムクラスのようです。質問をする際に組み込みのクラスを使用するか、少なくともドキュメンテーション/ソースへの参照を提供することを検討してください。
追加された 著者 Alexei Levenkov,

2 答え

限り、メカニックとして、私はCommandLineProcessがプロセスをラップすると仮定しますか?もしそうなら、一見すると、それに必ずしも間違っていることはありません。私は、Webアプリケーションから実行可能ファイルとして実行することにいくつかの問題があります。開発者よりもセキュリティを低下させる可能性が高いからです(開発で見られる通常の方法に従えば)。

実際のビジネスコードをクラスライブラリにカプセル化する場合は、Webアプリケーションでコードを実行できます。主なルールは、セキュリティを低下させる必要がないように、保存するフォルダがWebルート(物理的または論理的)の下にあることです。しかし、ロジックがカプセル化されている場合は、プロセスをスピンアップすることなく、Webプロセスで「ファイルクリーナー」を実行できます。

あなたの他のオプションは、サービスにプロセスをラップすることです(私は非HTTP WCFサービスが好きですが、必要に応じてWindowsサービスに行くことができます)。サービスのエンドポイントでSOAパスをたどることが理にかなっている場合は、この方向に進むしかありません。これは単一のアプリケーションに分離されている可能性が高いため、プロセス内では意味があります(Webroot以外のディレクトリに保存しない限り)。

これが理にかなってほしい。

1
追加された
(+1)Webアプリケーションはイントラネット内で実行され、外部アクセスは許可されず、一部のサブネットのみがアクセスできるようにIPがフィルタされます。.exeは以前開発されたコンソールアプリケーションによって生成され、私のウェブアプリだけで。私はコードを書き直す必要がないように直接使用したいが、主にtxtファイルの生成に最大5分(同時アクセスでは何の問題もない)がかかることがあるため、asynchを呼び出すことができます。さらに、場合によってはexeを手動で実行する必要があります。したがって、すべてのコードが1つの場所にある方がよいでしょう。
追加された 著者 Francesco,
例として、Webアプリケーション内の新しいクライアント作成は、txtファイルを作成するトリガーです。私はWebアプリケーション自体でこれを行うことができますが、ユーザーがコントロールを返す前に3〜5分待つことができます。これからの私の考えは、txtファイルの生成を切り離すことでした。私はまた、5分ごとに.exeが実行される予定のタスクを考えていました。私はコンソールアプリケーションを変更して、DB上の特定のテーブル(トリガが発生したときにWebアプリケーションで埋められる)を検索し、そのテーブルに適切なフラグが設定されていればそれをリセットしてからtxtファイルを生成します。
追加された 著者 Francesco,
私はまだウェブアプリケーションについて少し注意していますが、セキュリティの問題はそれほど重要ではないかもしれません。何が更新の必要性を引き起こすか?可能であれば、変更を加えるアプリケーションと同じアプリケーションを使用できますか(おそらくそれはあなたのWebアプリケーションですか?)作業を行いますか?
追加された 著者 Gregory A Beamer,

はい、それはそれ自身の上で死ぬでしょう - それは自分の上で.exeファイルが終了することを条件とします。 Webサーバーと同じ資格情報で実行されます。

あなたのWebアプリケーションが何をしているかに基づいてコードを実行しているので、これは安全でないと考えられます。しかし、問題は、一般的にこの方法で実行されている実際のユーザーではなく、アプリケーションにアクセスしている.exeファイルです。

Similar question here How do I run a command line process from a web application?

0
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript