C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[16]: VSTOのプロジェクト内からWebview2を呼出 [1]


(過去ログ 172 を表示中)

[トピック内 24 記事 (21 - 24 表示)]  << 0 | 1 >>

■99297 / inTopicNo.21)  Re[13]: VSTOのプロジェクト内からWebview2を呼出
  
□投稿者/ くま (177回)-(2022/03/04(Fri) 08:13:01)
説明不足ですみません。

VSTOはふつうのvb.net Windowsフォームで作成される「\bin\Debug」とは別に
「System.Reflection.Assembly.GetExecutingAssembly().Location」の場所に実行dllを配置
実際動かしているのが「System.Reflection.Assembly.GetExecutingAssembly().Location」にあるdllだそうです。
パスは自動生成の為一度コードを実行してパスを確認してもらいたかったのです。

また関連するdllやexeは先で書いた階層ごとにインストールされ管理するそうですが
本来なら「WebView2Loader.dll」をコピーしなければならない所、先の例の「\bin\Debug\ExcelVSTOTest.dll」の直下に存在しない為
自動コピーされず「WebView2Loader.dll」が存在しませんとなっています。

まず「WebView2」が動くことを前提に確認して

インストール用のファイル設定等で「WebView2Loader.dll」をその場所へコピーできればその方法でも良いし
また全体的にインストール環境を変えてしまえればそれでも良いし

配置およびアプリケーション マニフェストを追加するには
https://docs.microsoft.com/ja-jp/visualstudio/vsto/deploying-a-vsto-solution-by-using-windows-installer?view=vs-2022

できな場合、VSTO開始時に「System.Reflection.Assembly.GetExecutingAssembly().Location」で場所は特定できるので
ファイルを自動コピーされてはいかがですか?という内容です。

もしそれもできないのであれば別に前にお話ししたWebView2をCOMオブジェクトとして作成して参照設定で操作は実績もありますよ。
VSTOからそのCOMオブジェクトを参照して動作するようにすれば配置の問題もなくなりますよね?

という内容です。

引用返信 編集キー/
■99298 / inTopicNo.22)  Re[14]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ 大谷刑部 (186回)-(2022/03/04(Fri) 09:44:13)
No99297 (くま さん) に返信
> 説明不足ですみません。
>
> VSTOはふつうのvb.net Windowsフォームで作成される「\bin\Debug」とは別に
> 「System.Reflection.Assembly.GetExecutingAssembly().Location」の場所に実行dllを配置
> 実際動かしているのが「System.Reflection.Assembly.GetExecutingAssembly().Location」にあるdllだそうです。
> パスは自動生成の為一度コードを実行してパスを確認してもらいたかったのです。
>
> また関連するdllやexeは先で書いた階層ごとにインストールされ管理するそうですが
> 本来なら「WebView2Loader.dll」をコピーしなければならない所、先の例の「\bin\Debug\ExcelVSTOTest.dll」の直下に存在しない為
> 自動コピーされず「WebView2Loader.dll」が存在しませんとなっています。

そうではありません。
runtimes以下のフォルダ並びにWebView2Loader.dllは\bin\Debug\からWebView2Loader.dllを呼ぶメソッドが正常に相対パスを判断できる場所にあるのに存在しないとなってます。
確かに、自動コピーであるところを「実際動かしている」箇所に手動コピーしたら、「存在しない」は解消されますが、結局はアクセス拒否で読めません。
VSTOに配置したWinforms(実際はActiveXのラッパーみたいですが)からの起動の時のみそういう異常現象が起きる状態です。
なので、「存在しません」になっている原因追求としては有益ですが、根本問題解決としては無意味です。

> まず「WebView2」が動くことを前提に確認して
>
> インストール用のファイル設定等で「WebView2Loader.dll」をその場所へコピーできればその方法でも良いし
> また全体的にインストール環境を変えてしまえればそれでも良いし

読める場所にコピーしたら、アクセス拒否になるのでそれは問題の解決にはなりません。

> もしそれもできないのであれば別に前にお話ししたWebView2をCOMオブジェクトとして作成して参照設定で操作は実績もありますよ。
> VSTOからそのCOMオブジェクトを参照して動作するようにすれば配置の問題もなくなりますよね?

他の方に紹介してもらったデコンパイルツールでWebView2Loader.dllをCallしてる箇所のロジックを確認したところ、
そのメソッドでCoreWebView2EnvironmentがドットネットであるというIf文が存在してたので、この辺りが悪さしてる可能性があります。
なので、内部的にはCOMであろうVSTOからCOM参照すればいいだろうというのはその通りかもしれませんが、
そうであればその時点が外部参照なので別プロジェクトのExeをCallするのとほぼ変わりません。手間はむしろ多いです。

結局のところ、同一プロジェクト内から呼べないのが、不具合もしくは仕様制限であるのならば、そうと判断できる材料を知りたいんですよ。
それがわかれば、外部参照に方針は切り替えます。


引用返信 編集キー/
■99299 / inTopicNo.23)  Re[15]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ radian (20回)-(2022/03/04(Fri) 10:50:46)
> 結局のところ、同一プロジェクト内から呼べないのが、不具合もしくは仕様制限であるのならば、そうと判断できる材料を知りたいんですよ

そもそも自分もくまさんも起動出来てて、アクセス拒否起きてるのそちらの環境だけなんで、不具合とか仕様制限はないでしょ。
情報も後出し小出しが多くて態度でかいんで、まあ好きにしろとしか言えないけど。
引用返信 編集キー/
■99300 / inTopicNo.24)  Re[16]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ くま (178回)-(2022/03/04(Fri) 18:37:08)
2022/03/04(Fri) 18:46:27 編集(投稿者)

>> VSTOはふつうのvb.net Windowsフォームで作成される「\bin\Debug」とは別に
>> 「System.Reflection.Assembly.GetExecutingAssembly().Location」の場所に実行dllを配置
>> 実際動かしているのが「System.Reflection.Assembly.GetExecutingAssembly().Location」にあるdllだそうです。
>> パスは自動生成の為一度コードを実行してパスを確認してもらいたかったのです。
>>
>> また関連するdllやexeは先で書いた階層ごとにインストールされ管理するそうですが
>> 本来なら「WebView2Loader.dll」をコピーしなければならない所、先の例の「\bin\Debug\ExcelVSTOTest.dll」の直下に存在しない為
>> 自動コピーされず「WebView2Loader.dll」が存在しませんとなっています。
>
>そうではありません。
失礼ですがそれでははなぜ「System.Reflection.Assembly.GetExecutingAssembly().Location」はOfficeアドオン管理フォルダを指示しているのですか?

自分のアプリケーションの実行ファイルのパスを取得する
https://dobon.net/vb/dotnet/vb6/apppath.html

「\bin\Debug」や「\bin\Release」のファイルがOfficeアドオン管理フォルダにコピーされ実行されているからそのパスが返されているんですよ。
今度は「System.Reflection.Assembly.GetExecutingAssembly().Location」の値がおかしいという事ですか?

元々は
> "DLL 'WebView2Loader.dll' を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)"
の解消方法の話ですよね?そこにインストールの話ありましたか?

後からそこにdllコピーしても動かない、今度はアクセス拒否とか。
内容キチンと理解できていますか?
インストール時手動や自動でコピーさせられないしインストール時の設定も試されていないご様子。
今度はCOMはめんどくさいからexeで良いとか、それなら初めからexeにすればいいんじゃないですか?

WebView2のロードでハマるならこんどはVSTOの同期とWebView2の非同期制御なんて解決できませんよ。

No99299 (radian さん) に返信
>>結局のところ、同一プロジェクト内から呼べないのが、不具合もしくは仕様制限であるのならば、そうと判断できる材料を知りたいんですよ
>
> そもそも自分もくまさんも起動出来てて、アクセス拒否起きてるのそちらの環境だけなんで、不具合とか仕様制限はないでしょ。
> 情報も後出し小出しが多くて態度でかいんで、まあ好きにしろとしか言えないけど。

私も同意見です。
今回実際エラーも現象も確認して、対応し実行できている事を確認してから記載しています。
それを否定して「でも・だって」ならご自由にリコンパイルでもして修正すれば動くんじゃないですかね

追記
「アクセスが拒否されましたなら」一番初めに回答した内容じゃないのですか?
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -