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

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

新規登録して質問してみよう
ただいま回答率
86.02%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

IIS

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

ASP.NET

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

WebBrowserの動作に影響するPC環境の相違点

tipsy
tipsy

総合スコア11

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

IIS

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

ASP.NET

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

2回答

0グッド

0クリップ

4056閲覧

投稿2018/10/30 11:54

編集2018/11/09 07:47

前提・実現したいこと

単体では正常動作を確認できている実行ファイルが、
本番環境で他のASP.NETアプリケーションから呼び出すとエラーになります。
Foam_Loadの末尾にWebBrowserから指定URLにナビゲートする際に
エラーが発生しているのですが、
どこをどう修正すればいいのか検討がつかない状態です。

私自身がWeb系開発の初心者で、
周囲にもASP.NET Web フォームアプリケーション開発に詳しい人がいないため
初歩的な知識が抜けている可能性があります。

特定条件でのみ発生するため、環境の違いが原因だと考えています。
確認すべき点や、検索ワードのアドバイスをいただけないでしょうか。

【大まかな処理の流れ】
1.許可IPアドレスからPOSTがあればWebAPIがA.exeを実行。
2.A.exeの処理の途中でB.exeを実行。
3.B.exeの完了後にA.exeの残りの処理を実施。
4.A.exeの完了後にWebAPIからHTTPレスポンスを送信。

【実行ファイルB.exeの概要】
WebBrowserで特定のサイトにアクセスし、
ログイン~データ登録までを自動処理する
ASP.NET Webフォームアプリケーションです。

発生している問題・エラーメッセージ

B.exeのWebBrowserでのサイトへの初回アクセス時に
サイト内のファーストパーティークッキーが無効な場合のエラー画面に遷移。
ログイン画面に入ることができず、残りの処理を行えないためエラーになります。
初回のDocumentCompletedイベントの段階で、アクセスしたかったURLの末尾に
おそらくエラー時のURLパラメータが追加されており、
改めてブラウザで開くとエラー内容のみ記載された画面が表示されました。
(「jsp」拡張子のウェブサイトについては全く知識が無いため
内部の処理はいまいち想像できていません。
クッキーに関係無くこのようなエラー画面を出すこともあるのでしょうか?)

本来アクセスしたいURL(例):https://xxxxxxx/login.jsp
エラー時に取得したURL(例):https://xxxxxxx/login.jsp?Try=y

WebAPI→A.exe呼び出し(2018/10/31追記)

VB

1Dim MyProc As Process 2MyProc = New Process 3MyProc.EnableRaisingEvents = False 4MyProc.StartInfo.FileName = "C:\xxxxx\A.exe" 5MyProc.StartInfo.Arguments = "99999" '引数はユーザーID 6MyProc.Start()

A.exe→B.exe呼び出し(2018/10/31追記)

VB

1Dim procUp As New Process 2procUp.StartInfo.FileName = "C:\xxxxx\B.exe" 3'引数はエラーログとサイトでのアップロードに使用するファイルのパス 4procUp.StartInfo.Arguments = "C:\xxxxx\err.txt" & " " & "C:\xxxxx\upload.csv" 5 6Try 7 procUp.Start() 8Catch ex As Exception 9 'exeの実行で例外が出た場合は即中止 10 MyErrStream = New StreamWriter(wErrFilePath, True, System.Text.Encoding.GetEncoding("Shift-JIS")) 11 MyErrStream.WriteLine("B.exe実行時に例外が発生しました。(" & ex.GetType().ToString & ")") 12 ExeErrFG = True 13End Try 14 15If ExeErrFG = False Then 16 procUp.WaitForExit(600000) 17 If procUp.HasExited = False Then 18 procUp.Kill() 19 End If 20 '(省略) 21End If

B.exe内のWebBrowser関連の処理(2018/10/31追記)

VB

1Public WithEvents WebBrowser1 As New WebBrowser2() 2Private pURL As String = "https://xxxxxxx/" 3 4Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 5 6 '(省略) 7 8 '拡張したWebBrowser2をFormに追加 9 WebBrowser1.Dock = DockStyle.Fill 10 Controls.Add(WebBrowser1) 11 WebBrowser1.ScriptErrorsSuppressed = True 12 WebBrowser1.Navigate(pURL & "login.jsp") 'ログイン画面 13End Sub 14 15Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted 16 '「試したこと」に記載しているクッキーのチェックを行ったコード 17 'MyWStream.WriteLine("url:" & WebBrowser1.Document.Url.ToString) 18 'MyWStream.WriteLine("cookie:" & WebBrowser1.Document.Cookie) 19 20 If Environment.ExitCode = 9 Then 21 Application.Exit() 22 Else 23 If WebBrowser1.Document.Url.ToString.Contains(pURL) Then 24 '画面ごとに必要なhtml要素の有無を確認してから操作していく処理(省略) 25 Else 26 MyWStream.WriteLine("URLが不正です。(" & WebBrowser1.Document.Url.ToString & ")") 27 AppCloseRtn(9) 28 Exit Sub 29 End If 30 End If 31End Sub

WebBrowser2クラス(2018/10/31追記)
(他の人が作りかけていたものを引き継いで手探りで調べながら作成しためコメントに誤りがあるかもしれません。)

VB

1Imports System.Runtime.InteropServices 2Imports System.Security.Permissions 3 4Public Class WebBrowser2 5 Inherits WebBrowser 6 7 Private cookie As AxHost.ConnectionPointCookie 8 Private helper As WebBrowser2EventHelper 9 10 'イベントデリゲートの宣言 11 Public Event NavigateError As WebBrowserNavigateErrorEventHandler 12 13 'デリゲートの宣言 14 Public Delegate Sub WebBrowserNavigateErrorEventHandler(ByVal sender As Object, _ 15 ByVal e As WebBrowserNavigateErrorEventArgs) 16 17 <PermissionSetAttribute(SecurityAction.LinkDemand, _ 18 Name:="FullTrust")> Protected Overrides Sub CreateSink() 19 20 '派生元クラスのCreateSinkを呼び出す 21 MyBase.CreateSink() 22 23 'コントロールのイベント処理をActiveXに接続する 24 helper = New WebBrowser2EventHelper(Me) 25 cookie = New AxHost.ConnectionPointCookie( _ 26 Me.ActiveXInstance, helper, GetType(DWebBrowserEvents2)) 27 28 End Sub 29 30 <PermissionSetAttribute(SecurityAction.LinkDemand, _ 31 Name:="FullTrust")> Protected Overrides Sub DetachSink() 32 33 'ActiveXに接続されているコントロールのイベント処理を解放する 34 If cookie IsNot Nothing Then 35 cookie.Disconnect() 36 cookie = Nothing 37 End If 38 39 '派生元クラスのDetachSinkを呼び出す 40 MyBase.DetachSink() 41 42 End Sub 43 44 'ActiveXからのナビゲートエラーイベントによるコールバック 45 Protected Overridable Sub OnNavigateError( _ 46 ByVal e As WebBrowserNavigateErrorEventArgs) 47 48 RaiseEvent NavigateError(Me, e) 49 50 End Sub 51 52 'NavigateErrorイベント情報クラス 53 Private Class WebBrowser2EventHelper 54 Inherits StandardOleMarshalObject 55 Implements DWebBrowserEvents2 56 57 Private parent As WebBrowser2 58 59 Public Sub New(ByVal parent As WebBrowser2) 60 Me.parent = parent 61 End Sub 62 63 Public Sub NavigateError(ByVal pDisp As Object, _ 64 ByRef URL As Object, ByRef frame As Object, _ 65 ByRef statusCode As Object, ByRef cancel As Boolean) _ 66 Implements DWebBrowserEvents2.NavigateError 67 68 ' Raise the NavigateError event. 69 Me.parent.OnNavigateError( _ 70 New WebBrowserNavigateErrorEventArgs( _ 71 CStr(URL), CStr(frame), CInt(statusCode), cancel)) 72 73 End Sub 74 75 End Class 76 77End Class 78 79'NavigateErrorイベントのプロパティセット 80Public Class WebBrowserNavigateErrorEventArgs 81 Inherits EventArgs 82 83 Private urlValue As String 84 Private frameValue As String 85 Private statusCodeValue As Int32 86 Private cancelValue As Boolean 87 88 Public Sub New( _ 89 ByVal url As String, ByVal frame As String, _ 90 ByVal statusCode As Int32, ByVal cancel As Boolean) 91 92 Me.urlValue = url 93 Me.frameValue = frame 94 Me.statusCodeValue = statusCode 95 Me.cancelValue = cancel 96 97 End Sub 98 99 Public Property Url() As String 100 Get 101 Return urlValue 102 End Get 103 Set(ByVal value As String) 104 urlValue = value 105 End Set 106 End Property 107 108 Public Property Frame() As String 109 Get 110 Return frameValue 111 End Get 112 Set(ByVal value As String) 113 frameValue = value 114 End Set 115 End Property 116 117 Public Property StatusCode() As Int32 118 Get 119 Return statusCodeValue 120 End Get 121 Set(ByVal value As Int32) 122 statusCodeValue = value 123 End Set 124 End Property 125 126 Public Property Cancel() As Boolean 127 Get 128 Return cancelValue 129 End Get 130 Set(ByVal value As Boolean) 131 cancelValue = value 132 End Set 133 End Property 134 135End Class 136 137' NavigateErrorのインターフェース定義 138<ComImport(), Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"), _ 139InterfaceType(ComInterfaceType.InterfaceIsIDispatch), _ 140TypeLibType(TypeLibTypeFlags.FHidden)> _ 141Public Interface DWebBrowserEvents2 142 143 <DispId(271)> Sub NavigateError( _ 144 <InAttribute(), MarshalAs(UnmanagedType.IDispatch)> _ 145 ByVal pDisp As Object, _ 146 <InAttribute()> ByRef URL As Object, _ 147 <InAttribute()> ByRef frame As Object, _ 148 <InAttribute()> ByRef statusCode As Object, _ 149 <InAttribute(), OutAttribute()> ByRef cancel As Boolean) 150 151End Interface

試したこと

エラー画面でクッキーが無効という旨が記載されていたため、
B.exeを実行する状況の条件を変えながらクッキーの確認を行いました。
※クッキー=WebBrowser.Document.Cookieの想定です。

■本番に一番近い状況を確認
・FiddlerからIISで実行しているWebAPIに必要データをPOSTし、一連の処理を実行。
→エラー画面に遷移。クッキーは空でした。

・WebAPIのIIS設定「IPアドレスおよびドメインの制限」で
B.exeで操作したいサイトのIPアドレスを許可エントリに追加して
FiddlerからIISで実行しているWebAPIに必要データをPOSTし、一連の処理を実行。
→エラー画面に遷移。クッキーは空でした。

■本番サーバ上で確認
・A.exeをコマンドプロンプトでを呼び出して大まかな処理の流れの2~3を実行。
→ログイン画面に遷移。クッキーの取得はできました。

・ASP.NETのWebサイトからA.exeを呼び出して大まかな処理の流れの2~3を実行。
→エラー画面に遷移。クッキーは空でした。

■開発環境で確認
・FiddlerからVisualStudioで実行しているWebAPIに必要データをPOSTし、
一連の処理を実行。
→ログイン画面に遷移。クッキーの取得はできました。
・ASP.NETのWebサイトからA.exeを呼び出して大まかな処理の流れの2~3を実行。
→ログイン画面に遷移。クッキーの取得はできました。

なお、クッキーにはIDなど毎回テストのたびに異なっている項目があるのですが、
B.exe側から強引にクッキーをセットしてログイン画面に入る、というような方法は
不可能という認識でいいでしょうか。

補足情報(FW/ツールのバージョンなど)

【言語・環境等】
・VB
・ASP.NET v4.0
・Visual Studio 2013
・本番サーバ:Windows Server 2012 R2(IIS Version 8.5.9600.16384)
・開発環境:Windows 7 Professional(IIS Version 7.5.7600.16385)

他に試したこと2

・アプリケーションプールの詳細設定でアプリケーションプールのIDを
DefaultAppPoolから管理者権限のあるユーザーに変更。(2018/11/09追記)
期待した動作は得られるようになりましたが下記の理由で没に。現在は設定していません。
・アプリケーションプールの権限が強すぎてセキュリティ面に不安がある。
・確認した日によって動作が変わるが、理由が不明。
【サーバーメンテナンス前】
・Administartorsグループのユーザーだとクッキー無効時のエラー画面に遷移。
・Administratorがログイン状態でないとクッキー無効時のエラー画面に遷移。
【サーバーメンテナンス後】
・Administratorsグループのユーザーでも正常動作。
・ログイン状態でなくても正常動作。

・WebBrowserControl.exeのバージョンをIE11に設定。(2018/11/09追記)
→クッキー無効時のエラー画面に遷移。

・HTTPClientでの実装(2018/11/09追記)
クッキーの一部が取得できませんでした。ブラウザでサイトを開いたときの動作をFiddlerで確認したところ、ログインページのソースで指定されている外部スクリプトをGET後、その内部の処理で作成したURLをGETしてCookieの設定を追加しているようでした。作成されるURLは毎回変わります。(用語・表現が正確ではないかもしれません。)JavaScriptはブラウザで実行するもの、という認識のためHTTPClientのみではログイン不可能なサイトだと考えています。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

SurferOnWww

2018/10/30 14:15

> 本番環境で他のASP.NETアプリケーションから呼び出すとエラーになります。← そもそもできないことをしているのだと思いますけど。その部分だけでいいのでコードをアップできませんか?

回答2

4

ベストアンサー

詳しい状況が分からないし検証もできませんので多分に想像が混ざってますが・・・

単体では正常動作を確認できている実行ファイルが、本番環境で他のASP.NETアプリケーションから呼び出すとエラーになります。

IIS のように、UI を表示しないことが前提の Windows のプロセスやサービスはユーザー対話モードで実行されていません。(デフォルトから設定を変えていれば話は別ですが。Environment.UserInteractive プロパティで分かります)

また、ASP.NET は IIS のワーカープロセスで動きますが、ワーカープロセスはデフォルトで「アプリケーションプール ID」になり、権限は低いものになります。詳しくは以下の記事を見てください。

アプリケーション プール ID
https://technet.microsoft.com/ja-jp/library/ee886292.aspx

ASP.NET Web アプリはユーザー対話モードで実行されていないので、MessageBox などの UI を使用すると例外がスローされます。

リソースにアクセスする場合、権限の問題で例外がスローされることもよくある問題です。

・・・ここまでは想像ではありません。常識的なことなので、すでにご承知かもしれませんが。

この先は想像ですが・・・

質問者さんのケースのように、ASP.NET Web アプリから Process.Start で別アプリを起動すると、別アプリはワーカープロセスのアカウントで動くはずです。

質問者さんの別アプリは Windows Forms + WebBrowser アプリということですが、それを動かすワーカープロセスはユーザー対話モードでは動いていないので、UI の表示はできません。また、権限も低いです。

上記が「本番環境で他のASP.NETアプリケーションから呼び出すとエラー」の原因かどうかは分かりませんが、そのあたりを確認してはいかがでしょう?

「本番環境で」ということは、開発環境では動いてのではないかと想像していますが、もしそうだとすると開発環境では Visual Studio を管理者権限で立ち上げて、IIS Express 上で Web アプリを実行しているのではないですか? その場合はワーカープロセスはユーザー対話モード&管理者権限となるので、動いたのではないかと思います。

投稿2018/10/31 02:09

SurferOnWww

総合スコア17450

tipsy, dotnetuseryamag, hihijiji, x_x👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

tipsy

2018/10/31 03:05

回答ありがとうございます。 ご指摘の通り、開発環境ではVisual StudidoがIIS Express 上で Web アプリを実行している状態でした。 ワーカープロセスの権限とユーザー対話モードについて調べてみます。 IISでWebAPIが使用しているアプリケーションプールのIDをデフォルトのApplicationPoolIdentityからカスタムアカウントで管理者権限のあるユーザーアカウントに変更するとB.exeがサイトにアクセスできるようにはなりましたが、権限が強すぎるのではという懸念点があるため他の方法でアプリを呼び出すことも検討したいと思います。
SurferOnWww

2018/10/31 03:28

> 権限が強すぎるのではという懸念点があるため その通りだと思います。 > 他の方法でアプリを呼び出すことも検討したいと思います。 効果があるのかどうか分かりませんが、以下のような手段があるそうです。試してみてはいかがですか? 別ユーザーで外部アプリケーションを起動する https://dobon.net/vb/dotnet/process/startwithusername.html
SurferOnWww

2018/10/31 05:32

ちょっと調べてみましたが、そもそも IIS のデフォルトのワーカープロセスには Process.Start でプロセスを起動する権限がないそうです。 Unable to Start a Process from ASP.NET https://support.microsoft.com/en-us/help/555134 なので、上のコメントに書いた方法は意味がなかったです。役に立たない情報だったようですみません。 実際に開発マシンのローカル IIS 10 で動く ASP.NET Web Forms アプリでやってみると、上の記事に書いてあるように "Process might start in the background (you can even see it in task manager)" は確認できますが、すぐに中断されてタスクマネージャーからは消えてしまいました。 解決策は上の記事に書いてありますが、お勧めできるような方法ではなく、可能であれば別の手段を考えた方がよさそうな気がします。
tipsy

2018/11/04 07:09

駄目元も含めて下記の手順を試してみましたが、本番環境ではいずれも B.exeのWebBrowserがクッキー無効時のエラー画面に遷移しているようでした。 ※実行ファイルがすぐ処理を完了してしまうことを考慮し、  Thread.Sleepを数秒間入れたうえで確認しています。 ・procUp.StartInfo.Verb = "RunAs"でのB.exe実行 ・procUp.StartInfo.UserName = "Administrator"でのB.exe実行 ・バッチファイルにrunasコマンドでB.exeを実行するように記載しA.exeで実行 ・タスクスケジューラにB.exeを登録し、そのタスクを呼び出すバッチファイルをA.exeで実行 →B.exeがタスクスケジューラに表示されることなく終了。 ・バッチファイルにAdministratorでB.exeを実行するように記載しA.exeで実行 →パスワード入力を求められた際に自動入力させられず断念。 ・PowerShellでB.exeをrunas実行するバッチファイルをA.exeで実行。 →UACが起動し、その先に進めずA.exeのタイムアウトで終了。 一方で新しい疑問点が二つ出てきました。 1.開発環境でエラーが発生しないのは何故でしょうか? 開発環境で実行した際にうまくいく件はIIS Expressが原因、という話でしたが 下記の手順でWebAPIを開発環境のIISに設定して Fiddlerでlocalhost宛にデータをPOSTした場合、正常動作しました。 (https://dotnet.programmer-reference.com/vs-iis/) B.exe動作時のWebBrowserの表示はありませんでしたが、 タスクスケジューラではDefaultAppPoolで実行しており、 外部サイトへのデータ登録まで行うことができていました。 サーバのIISで立ち上げているWebAPIの場合と結果が異なるのは何故でしょうか? 2.本番環境で不足しているとすれば何をする権限でしょうか? 本番環境で辛うじて動くのは、アプリケーションプールのプロセスIDを Administratorに設定した場合なのですが、 Cookieが下記のパターンで無効になっている理由がわかりません。 ・Administratorがログアウトしている状態でWebAPIにPOST ・AdministratorsグループのユーザーをプロセスIDに設定している状態でWebAPIにPOST Cookie自体は標準ユーザーでもブラウザに設定されるはずだと考えているのですが、 何故Aldiministratorsのユーザーではだめなのでしょうか。 一番強い権限を持っているAdministratorを指定しても ログインの有無で動作が変わる理由が何でしょうか……。 そもそもASP.NETのアプリケーションから、デスクトップとの対話が必要な処理を プロセスとして立ち上げることはできないことを前提にしても、 この二点と関連があるように思えませんでした。
SurferOnWww

2018/11/05 02:58

> プロセスとして立ち上げることはできないことを前提にしても、 ワーカープロセスに管理者権限を与えないかぎり「プロセスとして立ち上げることはできない」はその通りですので、自分的には話はそこで終わってしまいました。 なので、すみませんが、その先を考える気力がありません・・・が、最後に一つだけ。 IIS Express で動かしたときは、先にも書きましたように、ワーカープロセスはユーザー対話モード&管理者権限となるので、動いたのではないかと思います。 IIS で動かしたときは、例えワーカープロセスに管理者権限を与えてもユーザー対話モードではないという違いがあります(自分の環境の Windows 10, IIS10 の場合)。 関係あるかどうかは分かりませんが、そのぐらいの違いしか思い当たりません。 ページに Label を 2 つ追加して、以下のようなコードで確認してみてください。 Label1.Text = "UserInteractive: " + Environment.UserInteractive; Label2.Text = "User: " + System.Security.Principal.WindowsIdentity.GetCurrent().Name;
tipsy

2018/11/05 06:15

> ワーカープロセスに管理者権限を与えないかぎり「プロセスとして立ち上げることはできない」はその通りですので、自分的には話はそこで終わってしまいました。 > なので、すみませんが、その先を考える気力がありません・・・が、最後に一つだけ。 返信ありがとうございます。 何度もお手数をおかけして申し訳ありませんでした。 アドバイスいただいたテストコードを B.exeに入れて実行してみたところ下記の結果となりました。 【開発環境】 ・WebAPIをVisualStudioのデバッグ(IIS Express)実行した場合 UserInteractive: True User: PC名\ユーザー名 →B.exeは正常動作 ・WebAPIをIISで実行した場合 UserInteractive: False User: IIS APPPOOL\DefaultAppPool →B.exeは正常動作 【本番環境】 ※すべてWebAPIはIISで実行 ・DefaultAppPoolのIDが「ApplicationPoolIdentity」の場合 UserInteractive: False User: IIS APPPOOL\DefaultAppPool →Cookie無効エラー画面へ遷移 ・DefaultAppPoolのIDが「Administrator」かつ  Administratoがログイン済みの場合 UserInteractive: False User: PC名\Administrator →B.exeは正常動作 ・DefaultAppPoolのIDが「Administrator」かつ  Administratoがログアウトしている場合 UserInteractive: False User: PC名\Administrator →B.exeは正常動作 ・DefaultAppPoolのIDがAdministratorsグループのユーザーかつ  誰もログインしていない場合 UserInteractive: False User: PC名\Administratorsグループのユーザー →B.exeは正常動作 > IIS で動かしたときは、例えワーカープロセスに管理者権限を与えてもユーザー対話モードではないという違いがあります(自分の環境の Windows 10, IIS10 の場合)。 SurferOnWwwさんのおっしゃっている通りの結果になりました。 ただ、この状態で想定した正常時の動作ができているパターンがあるということは B.exeはユーザー対話モード無しで動かせるものなのかもしれないと思いました。 また、昨日コメントした2のほうの疑問点が今日は再現しなかったため ワーカープロセスの管理者権限以外で何か問題点はなかったか確認してみます。
SurferOnWww

2018/11/06 00:16

自分的には終った話と言いながら余計なお世話かもしれませんが、一言言わせていただけると・・・ 技術的な興味と言うことなら話は別ですが、Microsoft の公式文書で出来ないと言われていることを裏技を見つけるなどして抜け道を探して何とかしようとしているとすると、自分的には付いていけないです(正直時間の無駄と思ってしまいます)。 Form, WebBrowser の exe, それを ASP.NET のコードビハインドで Process.Start を使って起動するというのは考え直して、ASP.NET のコードビハインドで直接使える HttpClient などを使って実装するように方針転換してはいかがでしょう? そんなことはとっくに検討済みで、それができないから今のやり方になっているということでしたら失礼しました。

0

WebAPIから実行ファイルの呼び出し(Webbrowser操作)は
どうしても外せない仕様だったため下記の手順で対処しました。

  1. サーバーにUsersグループのアカウントを追加。
  2. 1で作成したアカウントをRemote Desktop Userグループに登録。
  3. 1で作成したアカウントにリモートでログインし、

 Internet Explorerを起動。
0. 1で作成したアカウントをRemote Desktop Userグループから解除。
0. WebAPIが使用するアプリケーションプールのIDを
カスタムアカウントで1で作成したアカウントに設定。

以前試したとき、作りたてのUsersグループのアカウントでは
Cookie無効エラーとなってうまく動かなかったのですが、
調査中に2~4の手順を行った流れで
Cookieが設定されるようになっていました。
リモートでのログイン状態でなくても動作することが確認できています。

抜け道的なやり方かもしれませんし
セキュリティ面もまだ不安が残りますが、
一応この手順で動くようになった、という意味で
解決方法として記載したいと思います。

投稿2018/12/08 11:51

tipsy

総合スコア11

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

IIS

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

ASP.NET

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。