私はASP.NET Core(v1.1)Webアプリケーションを使用しています。 web.configには次の行があります。ASP.NETコアで正しいプロセスパスが使用されるようにパブリッシングを設定する方法
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
これは私のローカルIIS Expressがアプリケーションをローカルで起動するために使用することを理解しています。
私は現在、リモートサーバーへの自動展開の一部として公開を設定しています。公開後、web.configが次のように変更されました。
<aspNetCore processPath="dotnet" arguments=".\MyProject.Web.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
このエラーは、リモートサーバーに展開されたときに発生します。 processPath
を完全な実行可能ファイルパス(C:\ Program Files \ dotnet \ dotnet.exe)に変更すると、問題が解決されました。 another SO questionへの応答は、ハッカーがシステムのPATH変数を対象とすることを防ぐための意図的なセキュリティ機能である可能性があることを示しています。私は、そのパスを明示的に設定するためにソースのweb.configを変更しようとしましたが、残念ながらサイトをローカルで実行するたびに値が%LAUNCHER_PATH%
に戻されます。
私の質問は、公開アプリケーションに正しいプロセスパスが含まれていることを確認する方法です。または、正しい質問は、システムのPATH変数を使用できるように、展開Webサーバーで何を設定する必要がありますか?
応答はありがたいですが、 'C:\ Program Files \ dotnet'はすでにシステムの' PATH'変数にあります。したがって、私の最終的な質問:「システムのPATH変数を使用できるようにするには、デプロイメントWebサーバーで何を設定する必要がありますか?これは許可のものでしょうか?私のapplictionプールユーザーは、 'C:\ Program Files \ dotnet'に対して読み取り/実行権限を持っています... – getsetcode
これは.NET CoreやIISとはまったく関係ありません。 'PATH'環境変数はWindowsのものです。ディレクトリ内の実行可能ファイルは、コマンドラインでフルパスを前に置かなくても使用できるようになります。それが動作しない場合は、最初に、 'PATH'変数がユーザ環境変数ではなくシステム環境変数に設定されていることを確認してください。次に、マシンを再起動して、Windowsに環境変数を取得させようとするかもしれません。 –
ありがとう、私はすべてを試しました。しかし、あなたが正しいです、もしこれが問題ならば、それはSOのための質問ではありません。私はServer Faultに関する質問をして、答えが得られたかどうかを報告します:https://serverfault.com/questions/879977/why-isnt-iis-on-windows-server-2012-able-to-access -system-environment-variables – getsetcode