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

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

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

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


(過去ログ 172 を表示中)

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

■99216 / inTopicNo.1)  VSTOのプロジェクト内からWebview2を呼出
  
□投稿者/ 大谷刑部 (175回)-(2022/02/21(Mon) 11:30:42)

分類:[VB.NET/VB2005 以降] 

出来ないんでしょうか?

環境は
OS:Win7(32bit)
VS:2019(VSTOプロジェクト(.netは4.72)でWebview2はインストール済)

やりたいことはExcelVBAで実装している社内の勤怠管理表のVSTOへのためし移植ですが、

・Excel上で式参照しているFunctionはVBAのまま
・ActiveXコントロール(ボタンなど)→VSTO上からWinFormsのコントロールに置き換え
・ボタンから、呼び出してるクラスモジュール等は.Net(VB)のクラスに置き換え

などはほぼ成功してます。

ExcelのActiveXコントロールのボタンから→WebView2配置のWinformのexe呼出としてたのを

VSTOテンプレートのExcel(xlsm)に配置のWinFormsのボタンからWebView2配置のWinform呼出

が上手くいきません。
フォーム自体は呼び出せます。
WebView2Loader.dllがアクセス拒否で呼び出せない(webview2が起動できない)みたいです。

回避方法はあるんでしょうか?
別Exeにしてshell関数等で起動すれば多分できるんでしょうが、できれば同じプロジェクト上で実装したい。
ご存知の方ご教示をお願いします。







引用返信 編集キー/
■99217 / inTopicNo.2)  Re[1]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ radian (14回)-(2022/02/21(Mon) 13:17:57)
使えるのは使えるっぽいですけど。エラーの詳細くらいは書けませんか?
https://github.com/MicrosoftEdge/WebView2Feedback/issues/187
https://github.com/MicrosoftEdge/WebView2Feedback/issues/2042
https://docs.microsoft.com/en-us/answers/questions/456717/deployed-c-app-using-webview2-cannot-find-the-runt.html
"webview2loader vsto"でググっただけ

引用返信 編集キー/
■99218 / inTopicNo.3)  Re[2]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ 大谷刑部 (176回)-(2022/02/21(Mon) 13:41:09)
No99217 (radian さん) に返信
> 使えるのは使えるっぽいですけど。エラーの詳細くらいは書けませんか?

書いてますが。

>>WebView2Loader.dllがアクセス拒否で呼び出せない(webview2が起動できない)みたいです。

要は、

"DLL 'WebView2Loader.dll' を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)"

になってるということです。
引用返信 編集キー/
■99219 / inTopicNo.4)  Re[3]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ 大谷刑部 (177回)-(2022/02/21(Mon) 13:45:37)
No99218 (大谷刑部 さん) に返信
> ■No99217 (radian さん) に返信
>>使えるのは使えるっぽいですけど。エラーの詳細くらいは書けませんか?
>
> 書いてますが。
> ↓
> >>WebView2Loader.dllがアクセス拒否で呼び出せない(webview2が起動できない)みたいです。
>
> 要は、
>
> "DLL 'WebView2Loader.dll' を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)"
>
> になってるということです。

WebView2Loader.dllをBin直下にコピーするとメッセージ以下に変わります。

"アクセスが拒否されました。 (HRESULT からの例外:0x80070005 (E_ACCESSDENIED))"
引用返信 編集キー/
■99220 / inTopicNo.5)  Re[4]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ radian (15回)-(2022/02/21(Mon) 14:09:23)
2022/02/21(Mon) 14:17:25 編集(投稿者)

>>使えるのは使えるっぽいですけど。エラーの詳細くらいは書けませんか?
>
> 書いてますが。
> ↓
> >>WebView2Loader.dllがアクセス拒否で呼び出せない(webview2が起動できない)みたいです。

エラーコードもスタックトレースも書いてないのを、詳細とは言わないと思います。
どちらも重要な情報なので。
引用返信 編集キー/
■99221 / inTopicNo.6)  Re[3]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ KOZ (221回)-(2022/02/21(Mon) 15:18:26)
No99218 (大谷刑部 さん) に返信
> "DLL 'WebView2Loader.dll' を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)"

「WebView2 アプリと WebView2 ランタイムを配布する」
https://docs.microsoft.com/ja-jp/microsoft-edge/webview2/concepts/distribution

を見ると、WebView2Loader.dll の位置は

\<myApp>
    \Microsoft.Web.WebView2.Core.dll
    \Microsoft.Web.WebView2.Winforms.dll
    \Microsoft.Web.WebView2.WPF.dll
    \runtimes
        \win-arm64\native\WebView2Loader.dll (arm64)
        \win-x64\native\WebView2Loader.dll (x64)
        \win-x86\native\WebView2Loader.dll (x86)

となっていて、マネージ DLL からの相対パスが決まっていそうです。

引用返信 編集キー/
■99224 / inTopicNo.7)  Re[4]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ くま (169回)-(2022/02/22(Tue) 04:32:02)
2022/02/22(Tue) 04:41:40 編集(投稿者)

一応あんまり流れていない情報で、WebView2使うときの注意点

WebView2を使ったexe、dllを「Program Files」等、管理者権限がある場所で実行してはいけません。
キャッシュファイルが作成できなくてエラーが発生します
もし行う場合、初期化の際
Await Microsoft.Web.WebView2.Core.CoreWebView2Environment.CreateAsync(Nothing, "キャッシュフォルダの作成できる所のパス")
でパスを作成できる箇所(Temp等)に変更してください。

私の場合、WebView2をcomクラスでdll化してAccess、Excelで使用していますが問題なく使えてますよ。ただ非同期で動くものを同期で待たないといけないのでちょっと工夫は必要でしたが。


引用返信 編集キー/
■99225 / inTopicNo.8)  Re[4]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ 大谷刑部 (178回)-(2022/02/22(Tue) 09:14:46)
No99221 (KOZ さん) に返信
> ■No99218 (大谷刑部 さん) に返信
>>"DLL 'WebView2Loader.dll' を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)"
>
> 「WebView2 アプリと WebView2 ランタイムを配布する」
> https://docs.microsoft.com/ja-jp/microsoft-edge/webview2/concepts/distribution
>
> を見ると、WebView2Loader.dll の位置は
>
> \<myApp>
> \Microsoft.Web.WebView2.Core.dll
> \Microsoft.Web.WebView2.Winforms.dll
> \Microsoft.Web.WebView2.WPF.dll
> \runtimes
> \win-arm64\native\WebView2Loader.dll (arm64)
> \win-x64\native\WebView2Loader.dll (x64)
> \win-x86\native\WebView2Loader.dll (x86)
>
> となっていて、マネージ DLL からの相対パスが決まっていそうです。

私もそのあたりの情報が怪しいとは思ってて、上記3つはプロジェクトプロパテティーに正常に出てるのですが、
WebView2Loader.dllのパスが上手く参照できないように思えます。
上記の場所にそれぞれ置かれてましたが、「指定されたモジュールが見つかりません。」となり、
Bin直下に移すと、「アクセスが拒否されました。」と出ている感じです。

なので、どのファイルの情報を修正すればWebView2Loader.dllがちゃんと参照されるかが知りたい感じです。



>
引用返信 編集キー/
■99226 / inTopicNo.9)  Re[5]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ 大谷刑部 (179回)-(2022/02/22(Tue) 09:27:55)
No99224 (くま さん) に返信
> 2022/02/22(Tue) 04:41:40 編集(投稿者)
>
> 一応あんまり流れていない情報で、WebView2使うときの注意点
>
> WebView2を使ったexe、dllを「Program Files」等、管理者権限がある場所で実行してはいけません。
> キャッシュファイルが作成できなくてエラーが発生します
> もし行う場合、初期化の際
> Await Microsoft.Web.WebView2.Core.CoreWebView2Environment.CreateAsync(Nothing, "キャッシュフォルダの作成できる所のパス")
> でパスを作成できる箇所(Temp等)に変更してください。

多分今出てる現象はそれ以前の状態です。
WebView2Loader.dllが読めてない状態なので、Awaitで落ちます。(呼べてないので待てないのは当然なんですが)

> 私の場合、WebView2をcomクラスでdll化してAccess、Excelで使用していますが問題なく使えてますよ。ただ非同期で動くものを同期で待たないといけないのでちょっと工夫は必要でしたが。

ExcelVBA版ではWScript.shellのオブジェクトでWinFormsで作成したExeをCallしてます。.Net6で作成したものはどうやら、Win7では動かないようですが、4.Xで作成した場合はWin7でも重いですが動いてはいます。
今回はVSTOなので呼び出すコード自体が.Netなので、最終手段としてはおっしゃってる内容(exeかDLLかは別として)にせざるを得ないですが、とりあえずは同一プロジェクトで実装できないか模索してます。

引用返信 編集キー/
■99227 / inTopicNo.10)  Re[5]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ くま (170回)-(2022/02/22(Tue) 10:33:35)
2022/02/22(Tue) 10:52:08 編集(投稿者)

まず確認
' Microsoft Edge Canary Windows64bit版の場合
コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}
' Microsoft Edge Canary Windows32bit版の場合
コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}
' WebView2 library Windows64bit版の場合
コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
' WebView2 library Windows32bit版の場合
コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
一応このどれかに当てはまっていてレジストリ登録されているのでしょうか?

次に「Microsoft Edge Canary」または「WebView2 library」と
NuGetでインストールされたであろう「Microsoft.WebWebView2」は最新ですか?

今日現在で
「Microsoft Edge Canary」がバージョン 100.0.1169.0 (公式ビルド) canary (64 ビット)
「Microsoft.Web.WebView2」が「1.0.1108.44」でした。
WebView2はバージョンアップが頻繁なので適合しないバージョン同士になりやすいです。
https://teratail.com/questions/289318

WebView2Loader.dllが読み込めていないのではなく、WebView2Loader.dll内のモジュールがバージョン違いで読み込めていない可能性はありませんか?

次に
No99225 (大谷刑部 さん) に返信
> ■No99221 (KOZ さん) に返信
>>■No99218 (大谷刑部 さん) に返信
>>「WebView2 アプリと WebView2 ランタイムを配布する」
>>https://docs.microsoft.com/ja-jp/microsoft-edge/webview2/concepts/distribution
>>
>>を見ると、WebView2Loader.dll の位置は
>>
>>\<myApp>
>> \Microsoft.Web.WebView2.Core.dll
>> \Microsoft.Web.WebView2.Winforms.dll
>> \Microsoft.Web.WebView2.WPF.dll
>> \runtimes
>> \win-arm64\native\WebView2Loader.dll (arm64)
>> \win-x64\native\WebView2Loader.dll (x64)
>> \win-x86\native\WebView2Loader.dll (x86)
>>
>>となっていて、マネージ DLL からの相対パスが決まっていそうです。

何種類かWebView2で作っていますが、こちらの構成で合っています。
あとは
https://docs.microsoft.com/ja-jp/microsoft-edge/webview2/how-to/static
これぐらいでしょうか?

私の場合 Visual Studio 2022 vb.net .net framework 4.8 windowsフォーム でwin7、win10のExcel2013、Access2013のVBAからCOMクラス化した状態で参照設定して呼び出し動いています。


引用返信 編集キー/
■99228 / inTopicNo.11)  Re[6]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ 大谷刑部 (180回)-(2022/02/22(Tue) 11:14:45)
No99227 (くま さん) に返信
> 2022/02/22(Tue) 10:52:08 編集(投稿者)
>
> まず確認
> ' Microsoft Edge Canary Windows64bit版の場合
> コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}
> ' Microsoft Edge Canary Windows32bit版の場合
> コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}
> ' WebView2 library Windows64bit版の場合
> コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
> ' WebView2 library Windows32bit版の場合
> コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
> 一応このどれかに当てはまっていてレジストリ登録されているのでしょうか?

それは大丈夫です。

> 次に「Microsoft Edge Canary」または「WebView2 library」と
> NuGetでインストールされたであろう「Microsoft.WebWebView2」は最新ですか?
>
> 今日現在で
> 「Microsoft Edge Canary」がバージョン 100.0.1169.0 (公式ビルド) canary (64 ビット)
> 「Microsoft.Web.WebView2」が「1.0.1108.44」でした。

そのバージョンです。最初VS2017でやっていたのですが、nugetの中に出てこないので、
プロジェクトをVS2019で開きなおしてNuGetでインストールしたらそのバージョンでした。
コントロールの配置自体は出来てるので、Webview2自体は認識できてると思います。

> >> \Microsoft.Web.WebView2.Core.dll
> >> \Microsoft.Web.WebView2.Winforms.dll
> >> \Microsoft.Web.WebView2.WPF.dll

は参照設定でもきちんとパスが表示されてるので、そこが読み込めてない可能性は低いと思います。
ここが異常なのであればそもそもコントロールの配置ができないはず。

> WebView2はバージョンアップが頻繁なので適合しないバージョン同士になりやすいです。
> https://teratail.com/questions/289318
>
> WebView2Loader.dllが読み込めていないのではなく、WebView2Loader.dll内のモジュールがバージョン違いで読み込めていない可能性はありませんか?

コントロールの配置は出来てるが起動ができないという挙動に見えるので、WebView2Loader.dllを今のところ疑ってます。実際、WebView2Loader.dllに対してエラーメッセージが出てますし。
ただ、バージョン不適合はあり得ますね。なにせ試してるのがWin7 32bitなので。

引用返信 編集キー/
■99229 / inTopicNo.12)  Re[7]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ くま (171回)-(2022/02/22(Tue) 14:26:10)
今確認できないのですが、たしか「WebView2 ライブラリ」が無くてもコントロールは作成できたはずです。
(コントロール配置時に「WebView2」本体は動かさない為)
なので先のレジストリでバージョンとインストールの確認が必要になりましたから。

https://docs.microsoft.com/ja-jp/microsoft-edge/webview2/release-notes

・前に確認してもらったレジストリに書かれているバージョンは 98.0.1108.44 以上ですか?

・WebView2のコントロールを張り付けた状態だけのwindowフォームをVSTOテンプレートから呼び出しても同じ症状ですか?
(WebView2の非同期処理がVSTOと相性が悪いとか?)

・「Any CPU」ではなく「x86」(32bit)を明確にするとか。

私の環境だとWindows7(64bit)なので、その差ぐらいしか違いが無いですね...。
Windows7の「Microsoft Edge Canary」は
バージョン 100.0.1169.0 (公式ビルド) canary (64 ビット)
でした。

お役にたてず申し訳ございません。
引用返信 編集キー/
■99230 / inTopicNo.13)  Re[8]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ radian (16回)-(2022/02/22(Tue) 18:27:43)
試しにVSTO作ってみて、モジュールが見つかりませんにはなったけど、
WebView2Loader.dll の場所変えたら普通に動いたんで、
単純にDLLの置き場所やアクセス権の問題じゃないっすか。
引用返信 編集キー/
■99241 / inTopicNo.14)  Re[8]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ 大谷刑部 (181回)-(2022/02/25(Fri) 10:59:16)
No99229 (くま さん) に返信
> ・WebView2のコントロールを張り付けた状態だけのwindowフォームをVSTOテンプレートから呼び出しても同じ症状ですか?
> (WebView2の非同期処理がVSTOと相性が悪いとか?)

ええ。ほぼその状態で動きません。ローダーが読めないので起動できてない=Await処理が即落ちします。
コントロールを雛形のExcelシートに直接配置しても症状は同じです。
同一ソリューション内に別プロジェクトでWinformプロジェクトを作って、そのexeをcallしたら正常に起動します。
VSTOのプロジェクト内にWebview2コントロールを配置したFormを作って、呼び出すと症状が発生します。
相性といえばそうかもしれません。ただ非同期処理云々ではなく、所定の相対位置にフォルダとDLLが作られているのにいないと言われてる感じです。
VSTO本体のテンプレート、DLLと同じパスにコピーすると、アクセス拒否になります。

> ・「Any CPU」ではなく「x86」(32bit)を明確にするとか。
どれにしても同じです。

> 私の環境だとWindows7(64bit)なので、その差ぐらいしか違いが無いですね...。
> Windows7の「Microsoft Edge Canary」は
> バージョン 100.0.1169.0 (公式ビルド) canary (64 ビット)
> でした。

重くて落ちてるとかではないのでおそらくはその辺の環境起因ではない気がします。
7なら全部動かないとかなら、OSサポートの問題があるかもしれませんが、64なら動いてるとなると、そうではない。
読めるパスにいるはずのDLLが読めない現象に思えます。

なので、どこの設定を治せば?とかどのパスに置けば読めるかが知りたい感じです。
Webview2をプロジェクトに「インストール」して所定の場所にDLLが出来てるのに読めないのが??です。
引用返信 編集キー/
■99245 / inTopicNo.15)  Re[9]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ KOZ (222回)-(2022/02/25(Fri) 17:42:45)
No99241 (大谷刑部 さん) に返信
> Webview2をプロジェクトに「インストール」して所定の場所にDLLが出来てるのに読めないのが??です。

Microsoft.Web.WebView2.Core.dll を JustDecompile で逆コンパイルしてみました。
ソースを載せるのはちょっとはばかられるので概要のみ説明します。

WebView2Loader.dll のパスについては、Microsoft.Web.WebView2.Core.dll の中に CoreWebView2Environment クラスがあり、
LoadWebView2LoaderDll という static メソッドで相対パスを作って LoadLibrary しています。

ここを通らなかった場合は、普通に ネイティブ DLL の検索パスを検索することになるでしょう。

LoadWebView2LoaderDll メソッドは private であり、直接呼び出すことは出来ませんが、CoreWebView2Environment クラスの
GetAvailableBrowserVersionString メソッド、あるいは CompareBrowserVersions メソッドから呼び出されているので、
どちらかを呼び出せば DLL がありませんというエラーは解消すると思います。

Windows Forms アプリケーションから呼び出すとこのメソッドを通っていると思われるのに VSTO だと通っていなさそうなのがよくわからないですね。

興味がおありでしたら、ソースを追ってみてください。

JustDecompile は
https://www.telerik.com/products/decompiler.aspx
からダウンロードできます。


引用返信 編集キー/
■99261 / inTopicNo.16)  Re[10]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ 大谷刑部 (182回)-(2022/03/01(Tue) 16:09:11)
No99245 (KOZ さん) に返信
> ■No99241 (大谷刑部 さん) に返信
>>Webview2をプロジェクトに「インストール」して所定の場所にDLLが出来てるのに読めないのが??です。
>
> Microsoft.Web.WebView2.Core.dll を JustDecompile で逆コンパイルしてみました。
> ソースを載せるのはちょっとはばかられるので概要のみ説明します。
>
> WebView2Loader.dll のパスについては、Microsoft.Web.WebView2.Core.dll の中に CoreWebView2Environment クラスがあり、
> LoadWebView2LoaderDll という static メソッドで相対パスを作って LoadLibrary しています。
>
> ここを通らなかった場合は、普通に ネイティブ DLL の検索パスを検索することになるでしょう。
>
> LoadWebView2LoaderDll メソッドは private であり、直接呼び出すことは出来ませんが、CoreWebView2Environment クラスの
> GetAvailableBrowserVersionString メソッド、あるいは CompareBrowserVersions メソッドから呼び出されているので、
> どちらかを呼び出せば DLL がありませんというエラーは解消すると思います。

GetAvailableBrowserVersionStringの方は試してみましたが、解消しませんでした。
メッセージは同じローダーが見つかりませんですね。

> Windows Forms アプリケーションから呼び出すとこのメソッドを通っていると思われるのに VSTO だと通っていなさそうなのがよくわからないですね。

そこが釈然としないのですよね。
両者の挙動の違いはWindows Forms単独のプロジェクトでビルドすると、スタートアップフォームになるが、
VSTOのExcelシート上のボタン(これもWinformsのラッパーですが)からフォームを起動するため、シートオブジェクトモジュール上でFormをnewしてから起動してるくらいで、
遅いとかタイムアウトになるなら、なんとなくわかるんですが、所定の位置に置いてあるDllが見つからないと言われるのが解せないですね。

引用返信 編集キー/
■99277 / inTopicNo.17)  Re[10]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ 大谷刑部 (184回)-(2022/03/02(Wed) 14:20:34)
No99245 (KOZ さん) に返信
> Windows Forms アプリケーションから呼び出すとこのメソッドを通っていると思われるのに VSTO だと通っていなさそうなのがよくわからないですね。

↓MSDocにVSTOに配置したWinformsコントロールはActiveXのラッパーだから制限事項云々の記載があったのですが関係してますかね?
https://docs.microsoft.com/ja-jp/visualstudio/vsto/how-to-add-windows-forms-controls-to-office-documents?view=vs-2022

ちょっと視点を変えて試してみたら、
(1)VSTOと同一プロジェクトのWinformのWebview2
 ローダーが見つからない、または拒否されるで落ちる。

(2)VSTOと同一プロジェクトのWinformのWebbrowser(IEベース)
 コントロール自体は起動するようだが、ナビゲートできずに応答なしになる。

(3)VSTOと別プロジェクト(同一ソリューション内)のWinformのWebview2
起動までが重いが一応起動する。

(4)WScript.shell経由でEdgeをURL付きで起動する
 起動時間はEdge次第

という感じになります。

引用返信 編集キー/
■99278 / inTopicNo.18)  Re[11]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ くま (175回)-(2022/03/02(Wed) 17:07:31)
やっと時間が空いたので、VSTOで試すことができました。

■環境
win7(64bit) vs2019 vb.net .net framework 4.8 Windowフォーム
Excel2013(64bit)

Microsoft Edge
バージョン 100.0.1180.0 (公式ビルド) canary (64 ビット)

WebView2パッケージ 1.0.1158-prerelease

■状況
以上の状態で「WebView2」コントロールを張り付けたWindowフォームを作成。
フォームLoad時に「WebView2Loader.dllが読み込めません。」のエラーが発生する事を確認。

■対策
まずVSTOに以下のコードを追加して一度実行して下さい。
'dllファイル
Dim assemblyInfo As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
Dim assemblyLocation As String = assemblyInfo.Location

'.....\bin\Debug
Dim uriCodeBase As Uri = New Uri(assemblyInfo.CodeBase)
Dim ClickOnceLocation As String = Path.GetDirectoryName(uriCodeBase.LocalPath.ToString())

assemblyLocationにプロジェクト名.dllのパスが入っていると思います
例 プロジェクト名「ExcelVSTOTest」の場合
"C:\Users\[USERNAME]\AppData\Local\assembly\dl3\CNRPYTCJ.ZG5\VVV0ONEW.6PJ\de49be30\b54d9baa_082ed801\ExcelVSTOTest.dll"
二つ上の階層から見るとWebView2の場合5つ作成されている思います。
VVV0ONEW.6PJ
 3f078848
  2f5d03fb_022ed801
   __AssemblyInfo__.ini
   Microsoft.Office.Tools.Common.v4.0.Utilities.DLL
 55cac1b7
   00133601_341bd801
    __AssemblyInfo__.ini
    Microsoft.Web.WebView2.WinForms.DLL
 187c6b51
   dfd10714_5772d701
    __AssemblyInfo__.ini
    Microsoft.VisualStudio.Debugger.Runtime.Desktop.dll
 938faf1e
   00c43e1a_341bd801
    __AssemblyInfo__.ini
    Microsoft.Web.WebView2.Core.DLL
    ※runtimes
     win-arm64
      native
       WebView2Loader.dll
     win-x64
      native
       WebView2Loader.dll
     win-x86
      native
       WebView2Loader.dll
 de49be30
   b54d9baa_082ed801
    __AssemblyInfo__.ini
    ExcelVSTOTest.DLL
    ExcelVSTOTest.PDB

多分フォルダ名はプロジェクトで変更になりますが
「Microsoft.Web.WebView2.Core.DLL」
が格納されているフォルダに「WebView2Loader.dll」が格納されている「runtimes」をコピーして下さい。
正常に動作する事を確認しました。

引用返信 編集キー/
■99279 / inTopicNo.19)  Re[12]: VSTOのプロジェクト内からWebview2を呼出
□投稿者/ くま (176回)-(2022/03/02(Wed) 17:16:43)
追記
すみません「配布の時どうするか?」までは調べきれませんでした。
引用返信 編集キー/
■99284 / inTopicNo.20)  Re[12]: VSTOのプロジェクト内からWebview2を呼出
 
□投稿者/ 大谷刑部 (185回)-(2022/03/03(Thu) 10:09:26)
No99278 (くま さん) に返信
> やっと時間が空いたので、VSTOで試すことができました。

> ■対策
> まずVSTOに以下のコードを追加して一度実行して下さい。
> 'dllファイル
> Dim assemblyInfo As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
> Dim assemblyLocation As String = assemblyInfo.Location
>
> '.....\bin\Debug
> Dim uriCodeBase As Uri = New Uri(assemblyInfo.CodeBase)
> Dim ClickOnceLocation As String = Path.GetDirectoryName(uriCodeBase.LocalPath.ToString())

VSTOプロジェクト内のどこのソースに宣言する想定でしょうか?
PublicじゃなくDimなので、該当Formのメンバー変数として定義して試しました。(物理コピーの方もやってみました)

結果は、モジュールが見つかりませんがアクセスが拒否されましたに変わっただけで失敗です。

要は相対パス情報が正常に読めず、WebView2Loader.dllを読み元から読めるパスに置いたらアクセス拒否になる現象に変わりはありません。

> assemblyLocationにプロジェクト名.dllのパスが入っていると思います
> 例 プロジェクト名「ExcelVSTOTest」の場合
> "C:\Users\[USERNAME]\AppData\Local\assembly\dl3\CNRPYTCJ.ZG5\VVV0ONEW.6PJ\de49be30\b54d9baa_082ed801\ExcelVSTOTest.dll"
> 二つ上の階層から見るとWebView2の場合5つ作成されている思います。
> VVV0ONEW.6PJ
>  3f078848
>   2f5d03fb_022ed801
>    __AssemblyInfo__.ini
>    Microsoft.Office.Tools.Common.v4.0.Utilities.DLL
>  55cac1b7
>    00133601_341bd801
>     __AssemblyInfo__.ini
>     Microsoft.Web.WebView2.WinForms.DLL
>  187c6b51
>    dfd10714_5772d701
>     __AssemblyInfo__.ini
>     Microsoft.VisualStudio.Debugger.Runtime.Desktop.dll
>  938faf1e
>    00c43e1a_341bd801
>     __AssemblyInfo__.ini
>     Microsoft.Web.WebView2.Core.DLL
>     ※runtimes
>      win-arm64
>       native
>        WebView2Loader.dll
>      win-x64
>       native
>        WebView2Loader.dll
>      win-x86
>       native
>        WebView2Loader.dll
>  de49be30
>    b54d9baa_082ed801
>     __AssemblyInfo__.ini
>     ExcelVSTOTest.DLL
>     ExcelVSTOTest.PDB
>
> 多分フォルダ名はプロジェクトで変更になりますが
> 「Microsoft.Web.WebView2.Core.DLL」
> が格納されているフォルダに「WebView2Loader.dll」が格納されている「runtimes」をコピーして下さい。

仮に成功したとしても、おいそれとはそのまま採用とはしづらい策ですね。
用途としては、自社の社員の勤怠管理表なので、通常隠しファイルになってるAppDataを各自に表示させてそこにコピーとかはしづらい(理屈を理解できる社員がむしろ少数派)ですし、
そのあたりのフォルダの設定を勝手に変えたりするのが、常駐先で支給されたPCで行うのはまず(アカンウント権限上も)不可能です。

無理やり動かすようにしたいというよりは、プロジェクトの設定ファイル系の修正でできる範囲で運用上現実的なものにしたいです。
それが無理なようなら、別プロジェクト(別Exe)かWebview2にこだわらず直接Edgeを起動しちゃうかですね。

引用返信 編集キー/

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

管理者用

- Child Tree -