質問: value End Set End Property End Class ' NavigateErrorのインターフェース定義 _ Public Interface DWebBrowserEvents2 Sub NavigateError( _ _ ByVal pDisp As Object, _ ByRef URL As Object, _ ByRef frame As Object, _ ByRef statusCode As Object, _ ByRef cancel As Boolean) End 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のみではログイン不可能なサイトだと考えています。
回答: WebAPIから実行ファイルの呼び出し(Webbrowser操作)は どうしても外せない仕様だったため下記の手順で対処しました。 1. サーバーにUsersグループのアカウントを追加。 2. 1で作成したアカウントをRemote Desktop Userグループに登録。 3. 1で作成したアカウントにリモートでログインし、 Internet Explorerを起動。 4. 1で作成したアカウントをRemote Desktop Userグループから解除。 5. WebAPIが使用するアプリケーションプールのIDを カスタムアカウントで1で作成したアカウントに設定。 以前試したとき、作りたてのUsersグループのアカウントでは Cookie無効エラーとなってうまく動かなかったのですが、 調査中に2~4の手順を行った流れで Cookieが設定されるようになっていました。 リモートでのログイン状態でなくても動作することが確認できています。 抜け道的なやり方かもしれませんし セキュリティ面もまだ不安が残りますが、 一応この手順で動くようになった、という意味で 解決方法として記載したいと思います。