質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

ASP.NET Web API

ASP.NET Web APIはブラウザやモバイル機器のようなクライアント向けのHTTPサービスを構築するフレームワークです。Microsoft .NET Frameworkがベースになっており、RESTfulサービスを構築するには理想的です。

Q&A

解決済

2回答

2368閲覧

ASP.NET Core WebAPIをローカルのIIS10に配置した時に、Process.Startでエクスプローラーを開けなくて困っています。

pom12345

総合スコア12

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

ASP.NET Web API

ASP.NET Web APIはブラウザやモバイル機器のようなクライアント向けのHTTPサービスを構築するフレームワークです。Microsoft .NET Frameworkがベースになっており、RESTfulサービスを構築するには理想的です。

0グッド

0クリップ

投稿2022/09/11 04:17

編集2022/09/11 04:49

ASP.NET Core WebAPIをローカルのIIS10に配置した時に、Process.Startでエクスプローラーを開けなくて困っています。
もしわかれば教えていただきたいです。

(やりたいこと)
ローカルPCのエクスプローラーを利用したいため、ASP.NET Core WebAPIをローカルPCでのみ実行します。
ローカルPCのIISのWEB APIに 
http://localhost/api/Tests?value=C:\Users\username
のように入力してアクセスし、ローカルPCのエクスプローラーを開くことです。

VSのデバッグ時: 画面に「done」が表示され、エクスプローラーが開く。
IISに配置した時: 画面に「done」が表示され、エクスプローラーが開きません。

(環境)
Windows11
ASP.NET Core Web API(.NET 6(6.0.8))
Visual Studio Community 2022
IIS10 (ローカルのIIS) ※IIS有効化後、dotnet-hosting-6.0.8-win.exeをインストール
Google Chrome

(他に試したこと)
・IISのDefaultAppPoolの影響を考え、マネージドコードなし、クラシック、詳細設定のIDをLocalSystemに変更した。

・C:\inetpub\wwwroot のアクセス許可について
IUSR、IIS_IUSRSを書き込み/読み取り可で設定
ファイアウォールの影響があるかを一時的に無視したいため、Everyoneを一時的に書き込み/読み取り可で設定。

・実際のコードではNLogを使って、例外ログが出ていないか確認したがなかった。

(コード)

C#

1using Microsoft.AspNetCore.Mvc; 2using System.Diagnostics; 3 4namespace TestWebApi.Controllers { 5 6 [Route("api/[controller]")] 7 [ApiController] 8 public class TestsController : ControllerBase { 9 private readonly ILogger<TestsController> _logger; 10 11 public TestsController(ILogger<TestsController> logger) { 12 _logger = logger; 13 } 14 15 // GET api/<TestsController>/value 16 [HttpGet] 17 public string Get(string? value) { 18 if (value != null) { 19 Process process = new Process(); 20 process.StartInfo.UseShellExecute = true; 21 process.StartInfo.FileName = "EXPLORER.EXE"; 22 process.StartInfo.Arguments = @value; 23 process.Start(); 24 25 return "done"; 26 } 27 28 return "missing"; 29 } 30 } 31} 32

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/09/11 04:36

ASP.NET のタグも付けてください。 普通の Web アプリで、サーバー側でエクスプローラーを起動して表示するなんてことは考えもしないことですが、このスレッドの話はあくまで「ローカルPCでのみ実行」ということで特別な事情ということですか?
pom12345

2022/09/11 04:50

ご回答ありがとうございます。 ASP.NET のタグの件、かしこまりました。 こちらはローカルPCのみでの実行という特別な事情になります。 よろしくお願いします。
guest

回答2

0

ベストアンサー

このスレッドの話はあくまで「ローカルPCでのみ実行」ということで特別な事情があると理解して・・・

ローカルPCのエクスプローラーを利用したいため、ASP.NET Core WebAPIをローカルPCでのみ実行します。

VSのデバッグ時: 画面に「done」が表示され、エクスプローラーが開く。
IISに配置した時: 画面に「done」が表示され、エクスプローラーが開きません。

開発環境で Visual Studio から実行して IIS Express 上で動かすと期待通り動くが、運用環境で IIS にデプロイすると動かないという原因のほとんどは:

(1) ワーカープロセスのアクセス権の違い。

(2) 開発環境ではユーザー対話モードでアプリが実行されるが運用環境ではそうではない。

・・・です。

さらには、Windows Server 2008 から採用されている Session 0 分離というセキュリティ対策による制約もあると思います。詳しくは、以下の記事からダウンロードできる word 文書を見てください。

Impact of Session 0 Isolation on Services and Drivers in Windows
https://docs.microsoft.com/en-us/previous-versions/windows/hardware/design/dn653293(v=vs.85)

上で言う「VSのデバッグ時」は Visual Studio を PC にログインしたアカウントで起動したため、上の (1) はそのアカウントの権限(管理者権限?)、(2) はユーザー対話モードになっていると思います。

「IISに配置した時」も、「VSのデバッグ時」と同じ権限&ユーザー対話モードでアプリを動かせば、同じ結果になると思います。(たぶん今回は (2) の問題だけではなかろうかと思いますが) ←間違ってました。

【訂正】IIS でアプリを動かしたときは、例えワーカープロセスのアカウントを管理者権限を持つユーザーアカウントに変更してもユーザー対話モードになりません。(それゆえ、グラフィカルユーザーインターフェイス持つエクスプローラーなどは表示できません)

アカウントの設定は以下の画像のように IIS Manager を操作して可能ですので試してみてください。

イメージ説明

投稿2022/09/11 05:00

編集2022/09/11 07:54
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pom12345

2022/09/11 05:20

ご回答ありがとうございます。 > (1) ワーカープロセスのアクセス権の違い。 > (2) 開発環境ではユーザー対話モードでアプリが実行されるが運用環境ではそうではない。 が原因の可能性があるのですね。 > Windows Server 2008 から採用されている Session 0 分離というセキュリティ対策による制約 のほうは、英語かつ内容が難しいのでもう少し勉強してみます。 IIS Managerでのカスタムアカウントに自分自身のユーザー(管理者権限のもの)を登録できましたが、 IISを再起動しても、Process.Start()が実行できませんでした。
退会済みユーザー

退会済みユーザー

2022/09/11 05:29

そうすると「VSのデバッグ時」と「IISに配置した時」でホスティングモードが違うぐらいしか自分が思い当たることがありませんが、そのあたりはどうなってますか? プロセスがユーザー対話モードで実行されているかどうかは Environment.UserInteractive プロパティでわかるので、それも調べてみてください。
pom12345

2022/09/11 05:52 編集

> 「VSのデバッグ時」と「IISに配置した時」でホスティングモードが違う とはどのようなことでしょうか? VSのIISのホスティングモデルのことかはわかりませんが、現在は規定(インプロセス)となっていました。 Environment.UserInteractive プロパティ について確認しました。 VSデバッグ時:IsUserInteractive: True IIS実行時、IsUserInteractive: False ユーザー対話モードで実行されていなかったです。
退会済みユーザー

退会済みユーザー

2022/09/11 06:08 編集

Visual Studio での設定には Kestrel, IIS Express でインプロセスとアウトプロセスホスティングの 3 つから選択できるようになっていて Visual Studio 2022 ではデフォルトで Kestrel になるはずです。以下の記事を見てください。記事の画像のドロップダウンで IIS Express を選んだのであればインプロセスホスティングモデルになっているはずです。 開発環境で Kestrel 利用 (CORE) http://surferonwww.info/BlogEngine/post/2020/09/25/use-kestrel-web-server-in-development-environment.aspx IIS へのデプロイは以下の記事のようにしたのであればインプロセスホスティングモデルになっているのではないかと思います。 IIS に ASP.NET Core アプリを発行する https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/publish-to-iis?view=aspnetcore-6.0&tabs=visual-studio ・・・が、IIS のワーカープロセスのアカウントを「VSデバッグ時」と同じに変更したにもかかわらず、 > IIS実行時、IsUserInteractive: False > ユーザー対話モードで実行されていなかったです。 ということですと、どうなっているのか分からないです。
pom12345

2022/09/11 06:47 編集

規定(インプロセス)がインプロセスホスティングモデルなのでしょうか。 IsUserInteractiveをtrueにする方法がネットで調べても見つけられなかったので、 Web APIでは無理かもしれませんね。もう少し調べてみたいとは思いますが。 メインのASP.NETのシステムをブラウザで表示し、そこからローカルのWebAPIをURLで実行して ローカルのエクスプローラーを実行しようとしていたのですが、 エクスプローラーのプロパティでもユーザー対話モードを設定する場所がなかったので、 エクスプローラーを実行する方法が他にないか検討してみたいと思います。
退会済みユーザー

退会済みユーザー

2022/09/11 07:47 編集

以前、自分が別スレッドで回答したことなのに忘れてました。以下の記事を見てください WebBrowserの動作に影響するPC環境の相違点 https://teratail.com/questions/155213 ポイントは: (1) そもそも IIS のデフォルトのワーカープロセスには Process.Start でプロセスを起動する権限がない。 (2) IIS でアプリを動かしたときは、例えワーカープロセスのアカウントを管理者権限を持つユーザーアカウントに変更してもユーザー対話モードにならない。(それゆえ、グラフィカルユーザーインターフェイス持つエクスプローラーなどは表示できない) 上の (1) を解決するために回答の画像に示したように権限を持つアカウントに設定しても、(2) の問題でグラフィカルユーザーインターフェイスを表示できない(=エクスプローラーを表示できない)ということでした。 (2) を何とかする手段は少なくとも自分が調べた限りでは無かったです。 エクスプローラーで何をするのか分かりませんが、可能であればグラフィカルユーザーインターフェイスを使わない別の手段を実装する他なさそうです。
pom12345

2022/09/11 09:56

IISでの方法がないとわかっただけでも良かったです。ありがとうございます。 エクスプローラーはただ指定のフォルダをひらくだけなのですが、そういう要望があり、ローカルのweb apiならできるかもと思い、 apache等のhttpサーバーなら、ローカルのexeを実行できるという記事を見つけたので、別の方法を試してみたいと思います。 ありがとうございました。
guest

0

ローカル環境のIISでは、エクスプローラーを開くことができないことがわかりました。

投稿2022/09/11 09:58

pom12345

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問