Windows 10 Anniversary Update (バージョン 1607 ビルド 14393)を適用後、それまで動いていたVB .NETで作られたアプリケーションの動作が不安定になる現象が発生しています。
今までに確認した発生タイミングは「VB .NETからExcelを使用するとき」で、ワークブックを開くときであったり、ワークブックを保存するときであったり、PDF書き出しをするときであったりとまちまちです。
また、インストールの状況によって動作が変わったりもするようです。(Officeの再インストール後にエラーが発生するタイミングが変わったことで確認しています。)
ログを確認すると、以下のようなメッセージが記録されています。
リモート プロシージャ コールに失敗しました。 (HRESULT からの例外:0x800706BE) System.Runtime.InteropServices.COMException (0x800706BE): リモート プロシージャ コールに失敗しました。 (HRESULT からの例外:0x800706BE) RPC サーバーを利用できません。 (HRESULT からの例外:0x800706BA) System.Runtime.InteropServices.COMException (0x800706BA): RPC サーバーを利用できません。 (HRESULT からの例外:0x800706BA)
この問題について、マイクロソフトのコミュニティの『Windows 10 Anniversary Update 適用後、VBからのExcel出力ができなくなった。【Ver1607】』というトピックで同様の事例報告と解決方法がやり取りされていることを見つけました。
トピック中で紹介されていた方法に従い、Windows 10の設定画面から「Windowsで通常使うプリンターを管理する」という項目をオフにすると現象が発生しなくなりました。
※追記
2016/09/05の時点では、「Windowsで通常使うプリンターを管理する」の設定を行うにはWindows 10の設定画面、またはレジストリの操作を行う必要があります。
VB .NETのプログラム上で、このレジストリ設定値の取得と設定が簡単にできるようモジュールを作成しました。
ソースのダウンロード: LegacyDefaultPrinterMode.zip
(動作確認はVisual Studio 2015 Update 3で行いました。)
使用例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ' This software is distributed under the license of NYSL. Public Module ExampleModule Sub Example ' 「Windowsで通常使うプリンターを管理する」の設定値を取得する Dim mode = GetLegacyDefaultPrinterMode() Debug.Print( "現在の設定値:" & mode) ' 「Windowsで通常使うプリンターを管理する」がオフにする SetLegacyDefaultPrinterMode(MODE_OFF) End End Module |
Me dull. You smart. That’s just what I nedeed.