11 返信 最新の回答 日時: Dec 3, 2018 12:28 PM ユーザー:osato_reg

    Visual Studio からのCOMオブジェクト呼び出し

    SayMiwa Level 1

      Win7 + Visual Studio 2015  + InDesign CS6 のときには

       

      InDesign.Application inddApp = (InDesign.Application)Activator.CreateInstance(Type.GetTypeFromProgID("Indesign.Applicati on"));

       

      が成功してinddAppに情報を収録できるのですが、 Win10 + Visual Studio 2015  + InDesign CS6 や Win10 + Visual Studio 2015  + InDesign CC(2018)のときは

       

      「追加情報:型 'System.__ComObject' の COM オブジェクトをインターフェイス型 'InDesign.Application' にキャストできません。IID '{ABD4CBB2-0CFE-11D1-801D-0060B03C02E4}' が指定されたインターフェイスの COM コンポーネント上での QueryInterface 呼び出しのときに次のエラーが発生したため、この操作に失敗しました: インターフェイスがサポートされていません (HRESULT からの例外:0x80004002 (E_NOINTERFACE))。」

       

      となります。

       

      どうしたら、InDesign.Applicationを取得できるのか、どなたか教えてください。

       

      よろしくお願いいたします。

        • 1. Re: Visual Studio からのCOMオブジェクト呼び出し
          Omachi Most Valuable Participant

          CS6については、次のページの最後の方を確認してください。

          参照設定でエラーが出る場合の対処法

          これに加えて、バージョンを8.1に上げている場合は

          C:\ProgramData\Adobe\InDesign\Version 8.0-J\ja_JP\Scripting Support\8.0\Resources for Visual Basic.tlb

          のSupport\のあとの8.0が8.1になっているはずですのであわせて確認してください。

           

          CC2018で同様のトラブルには遭遇したことがないのですが、

          レジストリの

          \HKEY_CLASSES_ROOT\TypeLib\{76D0151D-8121-4BB3-9B29-4D137776EE97}\1.0\0\win32

          のパスが正しいか確認してください。

          1 人が役に立つと言っています
          • 2. Re: Visual Studio からのCOMオブジェクト呼び出し
            SayMiwa Level 1

            Omachiさん

             

            情報提供ありがとうございます。

            紹介いただいたページは既に閲覧済みでtlbの参照は成功しています。

             

            まだ、検証の途中ですがWin10 + Visual Studio 2015  + InDesign CC(2018)で成功したので皆さんに紹介しておきます。

            キャストができない理由はもっと深い(?別のレジストリキーとか)ところに原因があったようです。

             

            提供した情報が不足していて申し訳なかったのですが、正常に稼働していた Win7 + Visual Studio 2015  + InDesign CS6 の InDesignは Adobe Creative Cloud経由のインストールではありませんでした。今行っているのはAdobe Creative Cloud経由のインストールで、個人的にはUACが働かなく「大丈夫なのかな?」と思っておりました。

            UACを無効にしてAdobe Creative Cloud経由のインストールをしたところ期待通りにキャストできるようになりました。

            UACを有効にしているユーザーがAdobe Creative Cloud経由でインストールした場合、InDesignのアプリは起動するものの、どこかで不整合が発生しているかもしれません。

            各人の自己責任でお願いしますが、一旦UACを無効にしてインストールするとレジストリへ必要な情報が書き込まれるはずです。

            2 人が役に立つと言っています
            • 3. Re: Visual Studio からのCOMオブジェクト呼び出し
              osato_reg Level 1

              情報をありがとうございます。

               

              Windows 10 Home + Visual Studio Express 2012 + InDesign CC (2017)を使っています。

               

              UACを無効にしてAdobe Creative Cloud経由のインストールをしていますが、同じエラーで、キャストが失敗します。何か他に試せることがありましたら、アドバイスを頂けたらありがたいです。

               

              レジストリは、

              コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{31E4DE36-5972-4C7D-A781-08FDA261F9AD} \1.0\0\win32

              C:\ProgramData\Adobe\InDesign\Version 12.0-J\ja_JP\Scripting Support\12.1\Resources for Visual Basic.tlb

              となっていて、このフォルダに tlb があることは確認できています。

               

              よろしくお願いいたします。

              1 人が役に立つと言っています
              • 4. Re: Visual Studio からのCOMオブジェクト呼び出し
                Omachi Most Valuable Participant

                CC2017(12.1)のInDesign.Application.CC.2017_Jからtlbへの経路は、私の環境(64bit)では次のようになっています。

                なお、私はバージョン指定なしの"InDesign.Application"は使っていないので、

                最初と2行目のInDesign.Application.CC.2017_JのところをInDesign.Applicationに読み替えて確認してみてください。

                 

                \HKEY_CLASSES_ROOT\InDesign.Application.CC.2017_J\CLSID→{D2F81071-18E2-4D19-8FDD-298CEABDB 619}

                \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\InDesign.Application.CC.2017_J\CLSID→{D2F81071-18E2-4 D19-8FDD-298CEABDB619}

                 

                HKEY_CLASSES_ROOT\CLSID\{D2F81071-18E2-4D19-8FDD-298CEABDB619}\TypeLib→{31E4DE36-5972-4C7D -A781-08FDA261F9AD}

                HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{D2F81071-18E2-4D19-8FDD-298CEABDB619}\TypeLib→ {31E4DE36-5972-4C7D-A781-08FDA261F9AD}

                 

                \HKEY_CLASSES_ROOT\TypeLib\{31E4DE36-5972-4C7D-A781-08FDA261F9AD}\1.0\0\win32→C:\ProgramDa ta\Adobe\InDesign\Version 12.0-J\ja_JP\Scripting Support\12.1\Resources for Visual Basic.tlb

                \HKEY_CLASSES_ROOT\WOW6432Node\TypeLib\{31E4DE36-5972-4C7D-A781-08FDA261F9AD}\1.0\0\win32→ C:\ProgramData\Adobe\InDesign\Version 12.0-J\ja_JP\Scripting Support\12.1\Resources for Visual Basic.tlb

                \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{31E4DE36-5972-4C7D-A781-08FDA261F9AD}\1.0\0\ win32→C:\ProgramData\Adobe\InDesign\Version 12.0-J\ja_JP\Scripting Support\12.1\Resources for Visual Basic.tlb

                \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{31E4DE36-5972-4C7D-A781-08FDA261 F9AD}\1.0\0\win32→C:\ProgramData\Adobe\InDesign\Version 12.0-J\ja_JP\Scripting Support\12.1\Resources for Visual Basic.tlb

                \HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Classes\TypeLib\{31E4DE36-5972-4C7D-A781-08FDA261 F9AD}\1.0\0\win32→C:\ProgramData\Adobe\InDesign\Version 12.0-J\ja_JP\Scripting Support\12.1\Resources for Visual Basic.tlb

                 

                これらの設定全てが必要ではない気がしますが、私の知る限りこれ以外のレジストリ項目はないと思います。

                レジストリ項目がそろっているにもかかわらずエラーが出てしまうと、ちょっと手に負えません。

                1 人が役に立つと言っています
                • 5. Re: Visual Studio からのCOMオブジェクト呼び出し
                  osato_reg Level 1

                  ありがとうございます。

                   

                  すべて揃っていますね。

                  Visual Studio Express 2012の再インストールとInDesign CC 2017の再インストールも試しましたが、駄目です。

                   

                  パソコンを完全に初期化(リアバリー)するかどうか検討します。

                  ありがとうございました。

                  • 6. Re: Visual Studio からのCOMオブジェクト呼び出し
                    osato_reg Level 1

                    自己レスです。Visual Studio Community 2017でも試しましたが、駄目でした。

                    • 7. Re: Visual Studio からのCOMオブジェクト呼び出し
                      SayMiwa Level 1

                      経験則だけで情報をお伝えします(いろいろと書きましたが試す場合は自己責任でお願いいたします)。

                       

                       

                      CS6をAdobe Creative Cloud経由でインストールしたときキャストができないことがありました。当然ですが、いつものレジストリは修正済みです。ですが、Adobe Creative Cloudで更新情報が表示されたのでアップデート(もちろんUACは解除済み)を実施したらキャストできるようになりました。

                       

                      それから最近のWindowsソフトは「ソフトインストールしても再起動は不要」というものが多いですが、私は不具合が起きたときとかは必ずOSの再起動をします。

                       

                      また、釈迦に説法になるかと思いますが、VSの参照設定は設定時にファイル内容を読み込んでいるようですのでInDesignを再インストールしたときには再設定するようにしています。参照設 定を削除してcom参照を追加ですね。

                      それから、Interop.InDesign.dllが作成されているのならば削除して新しくCreateされるようにしています。

                      VSの再インストールしたようですが、VSのプロジェクトが古いままだったら参照設定やInteropファイルは古いままなのでは?

                      あと、プロジェクトのクリーンも試してみてください。ただ、他のDLLも再作成されると思うのでファイル日付け管理している場合にはお気を付けください。

                       

                      我流の勝利への法則ですが、

                       

                      ・UAC無効でInDesignアンインストール。このとき環境設定は残さない(すみません、勉強不足なので環境設定を残すメリットを知りません)。

                      ・OSを再起動

                      ・UAC無効でInDesignインストール

                      ・OSを再起動

                      ・更新プログラムがある場合はUAC無効で更新プログラム適用/適用後OS再起動 ← 更新プログラムがなくなるまで繰り返し

                      ・VS プロジェクトフォルダ内のInterop.InDesign.dllを削除。obj/Debugとかobj/Releaseとかにいると思います。ファイル検索した方が早いかも。

                      ・VS プロジェクトのInDesign参照を削除

                      ・InDesign参照を追加(再設定)。このときInDesignのcomタイプライブラリが複数表示されている場合はパスがProgramDataの方を選択。または直接ProgramD ataのファイルを参照し参照追加。

                       

                      私はこんな感じで対処します。あ、私はVSを管理者権限で起動しています。かなり昔ですがMS社員から勧められたので。

                      3 人が役に立つと言っています
                      • 8. Re: Visual Studio からのCOMオブジェクト呼び出し
                        osato_reg Level 1

                        情報をありがとうございます!

                         

                        そうですね。ご提示いただいたものはほとんど試してみました。

                        「VSを管理者権限で起動」は試していないので、試したいと思います。

                        • 9. Re: Visual Studio からのCOMオブジェクト呼び出し
                          SayMiwa Level 1

                          このスレッドにたどり着いた方へ追加の情報です。

                           

                          2018年10月にリリースされた InDesign CC 14.0 ( InDesign CC 2019 ) だとレジストリのHKEY_CLASSES_ROOT\Interfaceに必要な情報が書き込まれないため

                           

                          「追加情報:型 'System.__ComObject' の COM オブジェクトをインターフェイス型 'InDesign.Application' にキャストできません。IID '{ABD4CBB2-0CFE-11D1-801D-0060B03C02E4}' が指定されたインターフェイスの COM コンポーネント上での QueryInterface 呼び出しのときに次のエラーが発生したため、この操作に失敗しました: インターフェイスがサポートされていません (HRESULT からの例外:0x80004002 (E_NOINTERFACE))。」

                           

                          が発生します。インストーラー自体の問題のようで、旧バージョンの CC 2018 をインストールしてもレジストリに情報が書き込まれません(2018年11月16日現在)。

                           

                          CC 2018の場合

                           

                          [HKEY_CLASSES_ROOT\Interface\{ABD4CBB2-0CFE-11D1-801D-0060B03C02E4}]

                          @="_Application"

                           

                          [HKEY_CLASSES_ROOT\Interface\{ABD4CBB2-0CFE-11D1-801D-0060B03C02E4}\ProxyStubClsid32]

                          @="{00020420-0000-0000-C000-000000000046}"

                           

                          [HKEY_CLASSES_ROOT\Interface\{ABD4CBB2-0CFE-11D1-801D-0060B03C02E4}\TypeLib]

                          @="{A3BB4322-FF1B-4E64-A801-0998CF133906}"

                          "Version"="1.0"

                           

                          を登録すればInDesign.Applicationが救済されますが、InDesign.Document等の他のInterface情報も登録しないとだめです。私の場合、正常に稼働し ているPCのレジストリから必要なInterface情報を全て切り出して新PCに適用しました。

                           

                          ※レジストリの修正は各自の責任でお願いいたします。

                          2 人が役に立つと言っています
                          • 10. Re: Visual Studio からのCOMオブジェクト呼び出し
                            お~さんです。 Level 1

                            ちょっと気になったので、書きますが、InDesignの場合、昔から、COMが正常にレジストリーに書き込まれないという現象は続いています。

                            ですが、基本的には、インストーラーを管理者権限で実行し、VisualStudioも管理者権限で動かすということで何とかしのいできたので、これが、まず前提になると思います。

                            そのうえで、COMが正常にアクセスできない場合には、2か所のタイプライブラリーを削除し、これも、管理者権限でInDesignを起動するということでレジストリーの再登録を行い、それで もダメな場合には、InDesignを再インストールするという方法しかないような気がします。

                            大体、このやり方で、今まではうまくいっていました。

                            ただし、1台のコンピューターにて複数のバージョンのInDesignをインストールすると、ご指摘のように、いろいろな問題が出てきて、正しい登録がされない場合があるのではないでしょうか 。

                            一点、気になったのは、「(Type.GetTypeFromProgID("Indesign.Applicati on"));」の箇所でProgramIDを取得していますが、これは、InDesignが1バージョンしかインストールされていない場合にはいいですが、複数バージョンがインストールされ ている場合には、思ったバージョンのProgramIDが取得できないと思います。

                            なぜなら、「Indesign.Applicati on」は、VersionindepenentProgramIDだからです。ということは、すべてのバージョンが同じProgramIDになってしまう、おそらく最終にインストールしたバ ージョンにアクセスするようになるのではとおみいます。

                            バージョンを意識した場合、InDesignCC2018なら、「Indesign.Application.CC.2018」のようにバージョンを特定しないといけないと思います。

                            VisualStuidioからオブジェクトビューワー(64ビット)でCOM情報を見ると、インストールされた全てのInDesignのProgramIDなどが表示されますので、個別のP rogramIDを確認してみてください。

                            最近、PhotoshpやIllustratorで、同様な問題があり、レジストリーをいじくったりしましたが、オブジェクトビューワーで見ると、正しく反映されていなかったり、何度も、Ph otoshopやIllustratorを再インストールしていたら、余計おかしくなったりと、Adobe製品のCOM登録は一筋縄ではいかないですねぇ。

                            ちなみに、当方、Win10にてInDesignCC2017,2018,2019をインストールしていますが、珍しく、すべてのInDesignのCOMアクセスがうまくいっています。

                            以上、ご参考になれば。

                            1 人が役に立つと言っています
                            • 11. Re: Visual Studio からのCOMオブジェクト呼び出し
                              osato_reg Level 1

                              管理者で実行という話ですが、InDesignを管理者として実行すると、レジストリが正しく登録される場合もあるようです。