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

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

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

Re[6]: ActiveXコンポーネントを作成できません。


(過去ログ 137 を表示中)

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

■80425 / inTopicNo.1)  ActiveXコンポーネントを作成できません。
  
□投稿者/ のり (1回)-(2016/07/17(Sun) 13:09:07)

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

はじめて投稿させていただきます、のりと申します。初心者です。
どうかよろしくお願いいたします。
VB.net(2015)で作成しています(自分のPCはwindows7 pro sp1です)


■前置き
作成したソフトは自分の環境では動作するのですが、動作確認のためにネットカフェ(windows7 pro sp1)
で検証したところ、以下のようなエラーポップアップが出るときがあります。

↓------------------------------------------------------------------------------
 アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。
 [続行]をクリックするとアプリケーションはこのエラーを無視し、続行しようとします。
 [終了]をクリックするとアプリケーションは直ちに終了します。

 ActiveXコンポーネントを作成できません。
↑------------------------------------------------------------------------------


続行をクリックすると、以降は問題なく使用できてそうです。

毎回でるわけでは無さそうです。
20回ほどテストしてみたところ、上記のエラーポップアップの発生率はランダムに50%くらいです。

数件のネットカフェで試したところ(windows7 pro sp1)、同様のエラーポップアップの現象になりました。

(なお、自分のPCでは発生したことはありません。Visual Studio 2015 はインストールされています)


■本題
なぜ出るのか切り分けを行ってみたところ、どうやら IE を起動するときに上記のエラーになるようです。

現在 IEの使用状況は

 ・[参照設定] → [COM] → [タイプライブラリ] で [Microsoft Internet Control]にチェックを入れてます。

 ・以下コードです(今回の箇所のみ記載します)

    'IEの宣言
    Public IE As SHDocVw.InternetExplorer

    ----ここからフォームロードより下です----- 

    Sub IE_Start()

     'IEの起動
     IE = CreateObject("InternetExplorer.Application")  ←◆ここでエラーポップアップ◆
     IE.Visible = True

     IE.Navigate("http://www.yahoo.co.jp/")

    End Sub

このような感じです。
msgboxを随所に追加して切り分けた結果、
IE = CreateObject("InternetExplorer.Application")
の箇所で、エラーポップアップになっていることが分かりました。


SHDocVw というのが、ActiveXというのを使っているらしいので今回のようなエラーになるのでしょうか。

VisualStudioのソリューションエクスプローラーでは、My Project → 参照 → SHDocVw があります。
H:\WindowsApplication3\WindowsApplication3\obj\Debug\Interop.SHDocVw.dll
SHDocVw の参照先は上記のようなパスが記載されています。

他のパソコンで使うには .exeファイル 以外に Interop.SHDocVw.dll も .exeと同じ階層にコピーしないと
ダメなのでしょうか。


ちなみにデバッグで作成された .exe を使用しています。
H:\WindowsApplication3\WindowsApplication3\bin\Debug
他のパソコンで使用するには、何か別のデバック方法があるのでしょうか。


回避策として考えられることがありましたらアドバイス頂きたいです。

的を得ていない質問ですみません。
どうしても他のパソコンでエラーポップアップが出ないように、自分の環境と同じように使えるようにしたいです。
どうかよろしくお願いいたします。
引用返信 編集キー/
■80427 / inTopicNo.2)  Re[1]: ActiveXコンポーネントを作成できません。
□投稿者/ WebSurfer (969回)-(2016/07/17(Sun) 16:20:23)
No80425 (のり さん) に返信

何を作っているか不明ですがたぶん Windows Forms アプリであろうと想像してレ
スします。(そういう基本的な情報は最初に書いておいてくださいね)

> 回避策として考えられることがありましたらアドバイス頂きたいです。

以下のように変更したらどうなりますか? (普通は初期化はこうするはずとい
うことで、検証等はしてませんので、ハズレかもしれません。ハズレでしたらす
みません)

IE = CreateObject("InternetExplorer.Application")
 ↓↓↓
IE = New SHDocVw.InternetExplorer

または、SHDocVw.InternetExplorer を使うのは止めて、.NET Framework 2.0 以
降では shdocvw.dll のマネージラッパーである WebBrowser コントロール が提
供されていますので、機能的に不足がなければそれを使うのがお勧めです。

WebBrowser クラス
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.webbrowser.aspx


以下はご参考までに。

参照元の shdocvw.dll は IE のコンポーネントの一つです。詳しくは以下の記事
を見てください。

Internet Explorer のアーキテクチャ
https://msdn.microsoft.com/ja-jp/library/dd163924.aspx

Windows Forms がホストできるのは、Control から派生するクラスである Windows
Forms のコントロールだけです。なので、以下の記事にあるようにプロキシを作っ
てそれ経由で操作するのが本筋だと思います。

SHDocVw.dll と AxSHDocVw.dll の作り方と使い方
http://surferonwww.info/BlogEngine/post/2012/06/23/how-to-produce-and-use-shdocvw-and-axshdocvw.aspx

ただ、Visual Studio で IE のコンポーネントの shdocvw.dll を参照設定すると
bin フォルダに Interop.SHDocVw.dll というプロキシを作って配置してくれるはず
で、質問者さんはそれを使っていると思われます。

であれば、初期化は普通、

IE = New SHDocVw.InternetExplorer

とします。

CreateObject というのは VB 専用と思いますが、それとの違いは VB はほとんど使っ
たことがなくて知識もない自分には分かりません

引用返信 編集キー/
■80428 / inTopicNo.3)  Re[2]: ActiveXコンポーネントを作成できません。
□投稿者/ のり (3回)-(2016/07/17(Sun) 17:16:43)
No80427 (WebSurfer さん) に返信

WebSurfer様 
迅速な返信、ありがとうございます。

作成しているものは Windows Forms アプリケーションです。
説明が足らずに申し訳ないです。


アドバイスいただいた
 IE = CreateObject("InternetExplorer.Application")
  ↓↓↓
 IE = New SHDocVw.InternetExplorer

上記の件、了解です。
知らずに申し訳ないです。
上記の変更、自分のPCでは問題なく動作しましたので、これからネットカフェに行って試してみたいと思います。

結果は分かり次第、ご報告させていただきます。
今から1〜2時間以内くらいにはご報告できればと思います。

引用返信 編集キー/
■80429 / inTopicNo.4)  Re[3]: ActiveXコンポーネントを作成できません。
□投稿者/ のり (4回)-(2016/07/17(Sun) 19:46:57)
No80427 (WebSurfer さん) に返信

WebSurfer様 

返信おくれましてすみません。

アドバイスいただいた
 IE = CreateObject("InternetExplorer.Application")
  ↓↓↓
 IE = New SHDocVw.InternetExplorer

上記の変更、現在ネットカフェで試してみたのですが、すみません改善は見られませんでした。変化なしです。
自分のPC(windows7 pro sp1)とネットカフェのPC(windows7 pro sp1)は違いないように見えるのですが。。。

また「WebBrowserコントロール」ですが、使用するWEBサイトではうまく表示されなかったので諦めました。


以下は、今回質問したときのエラーの詳細です。
「ActiveXコンポーネントを作成できません」とありますし、プログラムコードのどこでエラーになるかを調べても
IEを起動するところでエラーになっているの感じなのですが、実は IE は関係ないということはありそうでしょうか。


↓------------------------------------------------------------------------------
 アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。
 [続行]をクリックするとアプリケーションはこのエラーを無視し、続行しようとします。
 [終了]をクリックするとアプリケーションは直ちに終了します。

 ActiveXコンポーネントを作成できません。

詳細
************** 例外テキスト **************
System.Exception: ActiveX コンポーネントを作成できません。
場所 Microsoft.VisualBasic.Interaction.CreateObject(String ProgId, String ServerName)
場所 WindowsApplication.Form1.IE_Open()
場所 WindowsApplication.Form1.Form1_Load(Object sender, EventArgs e)
場所 System.EventHandler.Invoke(Object sender, EventArgs e)
場所 System.Windows.Forms.Form.OnLoad(EventArgs e)
場所 System.Windows.Forms.Form.OnCreateControl()
場所 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
場所 System.Windows.Forms.Control.CreateControl()
場所 System.Windows.Forms.Control.WmShowWindow(Message& m)
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
場所 System.Windows.Forms.ContainerControl.WndProc(Message& m)
場所 System.Windows.Forms.Form.WmShowWindow(Message& m)
場所 System.Windows.Forms.Form.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

↑------------------------------------------------------------------------------


自分のPCではエラーは発生しないこと、
ネットカフェのPCでエラーになったときに「続行」するとそのまま使用できることや、エラーの発生率がランダムでエラーにならないときもあるので
(ちなみにネットカフェの3台のパソコン(windows7 pro sp1)で同様のエラーでした)
何かちょっとしたプログラムコード以外の間違いだったりすることも可能性としてありますでしょうか。

どうにかエラーを回避できないかと、ほとほと困っています。

もっと状況をご説明できればよいのですが、自分の知識だとうまく説明できません。悔しいですが申し訳ないです。
これではアドバイスを頂こうにも、アドバイスのしようがないと思います。

今までのご経験から何かちょっとしたヒントになりそうなものでもアドバイスいただけたら有り難いです。


引用返信 編集キー/
■80430 / inTopicNo.5)  Re[4]: ActiveXコンポーネントを作成できません。
□投稿者/ WebSurfer (970回)-(2016/07/17(Sun) 21:30:35)
No80429 (のり さん) に返信

> System.Exception: ActiveX コンポーネントを作成できません。
> 場所 Microsoft.VisualBasic.Interaction.CreateObject(String ProgId, String ServerName)
> 場所 WindowsApplication.Form1.IE_Open()
> 場所 WindowsApplication.Form1.Form1_Load(Object sender, EventArgs e)

上記を見ると、一番下の行から上の行に向かって順番に、

(1) Form1_Load メソッドが呼び出され
(2) Form1_Load メソッドから IE_Open メソッドが呼び出され
(3) IE_Open メソッドから CreateObject メソッドが呼び出され
(4) CreateObject メソッドで System.Exception 例外が発生した

というように読めます。

なので、CreateObject を New SHDocVw.InternetExplorer に変更してないように見えます。

と言って、最初の話、

> Sub IE_Start()
>
> 'IEの起動
> IE = CreateObject("InternetExplorer.Application")  ←◆ここでエラーポップアップ◆
> IE.Visible = True
>
> IE.Navigate("http://www.yahoo.co.jp/")
>
> End Sub

とも、トレース情報のメソッド名 IE_Open が違うように見えます。(上のコードでは IE_Start
になっている)

変更後の exe で試したのは間違いないですか? 変更前の exe を使ったということはないで
しょうか?

何にせよ「ネットカフェのPC」では調べるにも限界がありそうです。アンチウィルスソフトや
「ネットカフェのPC」独自の制約など質問者さんが知り得ないこともあるかもしれませんし。
回答者は質問者さん以上に分かりませんし。

検証する環境を「ネットカフェのPC」ではなく同僚や友人の PC とかに変えたほうがよさそう
な気がします。
引用返信 編集キー/
■80431 / inTopicNo.6)  Re[5]: ActiveXコンポーネントを作成できません。
□投稿者/ のり (5回)-(2016/07/17(Sun) 23:48:22)
No80430 (WebSurfer さん) に返信

WebSurfer様 

返信ありがとうございます。連絡遅れましてすみません。


すみません、先ほどは参考として「変更前のexe」のエラーを記載させていただきました。
以下にまとめます。

■「変更前のexe」のエラーは以下です。
↓------------------------------------------------------------------------------
 アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。
 [続行]をクリックするとアプリケーションはこのエラーを無視し、続行しようとします。
 [終了]をクリックするとアプリケーションは直ちに終了します。

 ActiveXコンポーネントを作成できません。

詳細
************** 例外テキスト **************
System.Exception: ActiveX コンポーネントを作成できません。
場所 Microsoft.VisualBasic.Interaction.CreateObject(String ProgId, String ServerName)
場所 WindowsApplication.Form1.IE_Open()
場所 WindowsApplication.Form1.Form1_Load(Object sender, EventArgs e)
場所 System.EventHandler.Invoke(Object sender, EventArgs e)
場所 System.Windows.Forms.Form.OnLoad(EventArgs e)
場所 System.Windows.Forms.Form.OnCreateControl()
場所 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
場所 System.Windows.Forms.Control.CreateControl()
場所 System.Windows.Forms.Control.WmShowWindow(Message& m)
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
場所 System.Windows.Forms.ContainerControl.WndProc(Message& m)
場所 System.Windows.Forms.Form.WmShowWindow(Message& m)
場所 System.Windows.Forms.Form.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

↑------------------------------------------------------------------------------


■「変更後のexe」のエラーは以下です。
↓------------------------------------------------------------------------------
アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。
[続行]をクリックするとアプリケーションはこのエラーを無視し、続行しようとします。
[終了]をクリックするとアプリケーションは直ちに終了します。

CLSID {0002DF01-0000-0000-C000-000000000046}を含むCOMコンポーネントのインスタンスを
IClassFactoryから作成中に、次のエラーが発生しました:800704a6 システムのシャットダウンは既にスケジュールされています。
(HRESULTからの例外:0x800704A6)。

詳細
************** 例外テキスト **************
System.Runtime.InteropServices.COMException (0x800704A6): CLSID {0002DF01-0000-0000-C000-000000000046} を含む COM コンポーネントのインスタンスを IClassFactory から作成中に、次のエラーが発生しました: 800704a6 システムのシャットダウンは既にスケジュールされています。 (HRESULT からの例外:0x800704A6)。
場所 System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
場所 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
場所 System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
場所 System.Activator.CreateInstance(Type type, Boolean nonPublic)
場所 System.Activator.CreateInstance(Type type)
場所 WindowsApplication.Form1.IE_Start()
場所 WindowsApplication.Form1.Button23_Click(Object sender, EventArgs e)
場所 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
場所 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.ButtonBase.WndProc(Message& m)
場所 System.Windows.Forms.Button.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

↑------------------------------------------------------------------------------



>とも、トレース情報のメソッド名 IE_Open が違うように見えます。(上のコードでは IE_Startになっている)
>変更後の exe で試したのは間違いないですか? 変更前の exe を使ったということはないでしょうか?

確かに WebSurfer様 の言われるとおり IE_Open はおかしいです。
しかし、ctrl+F で検索をかけてもヒットしませんでした。
以前 IE_Open という名前も使っていたような気もしないですが現在は使用していません。

ご指摘いただいた IE_Open ヒントに、調査を継続しようと思います。

ただし今回は時間が無かったので、発生率50%くらいという現象から先ほどドタン場で思いついた方法
「エラーになったら再度 IE_Sart をコールする」
で試してみたところ、それほど違和感無く使用できております。
(20回テストしてみてエラーポップアップは発生しませんでした)

これで何とか回避しつつ調査を継続します。


何か進展があったらご報告いたします。
(1週間程度、進展できなかったら「解決済み」にさせていただきます)


>「ネットカフェのPC」独自の制約など質問者さんが知り得ないこともあるかもしれませんし。
>検証する環境を「ネットカフェのPC」ではなく同僚や友人の PC とかに変えたほうがよさそうな気がします。

上記の件も確かにその通りだと思います。並行して検証したいと思います。


今回はじめて掲示板というものに質問させていただきましたが、返信いただきとても心強かったです。
ありがとうございました。





引用返信 編集キー/
■80432 / inTopicNo.7)  Re[6]: ActiveXコンポーネントを作成できません。
□投稿者/ Azulean (665回)-(2016/07/18(Mon) 07:48:39)
海外の事例でもあまり解き明かされていません。
https://social.msdn.microsoft.com/Forums/vstudio/en-US/fcac4d4d-3b5c-4d33-abe7-f6c667a3ba99/sometimes-the-exception-is-thrown-hresult-0x800704a6-using-systemwindowsformswebbrowser?forum=csharpgeneral

ネットカフェの PC は再起動後に HDD を元に戻す仕組みが入っていることがほとんどなので、起動直後は Windows Update がバックグラウンドで走っているかもしれません。
そうするとこの例外が出るという可能性も否定できないかなと思われます。
十分に落ち着いて(ディスクアクセスがなく、十数分〜数十分放置後)でも起きる感じですか?
引用返信 編集キー/
■80433 / inTopicNo.8)  Re[7]: ActiveXコンポーネントを作成できません。
□投稿者/ daive (123回)-(2016/07/18(Mon) 08:32:24)
役にたたなかもですが、
もしかして、
プロジェクトのプラットフォームを
Any CPU
にしていませんか?
Any CPU は一見便利ですが、
外部DLLなどを扱う場合に、問題を発生させます。
x86 / x64
を構成マネージャから指定して
各々の設定で、実行ファイルを作成すると、
各々のフォルダに、実行ファイルが生成されます。

引用返信 編集キー/
■80434 / inTopicNo.9)  Re[6]: ActiveXコンポーネントを作成できません。
□投稿者/ WebSurfer (971回)-(2016/07/18(Mon) 10:25:04)
No80431 (のり さん) に返信

「変更後のexe」で出てきたエラーメッセージの英語版、

Creating an instance of the COM component with CLSID {0002DF01-0000-0000-C000-000000000046}
from the IClassFactory failed due to the following error: 800704a6

でググってみると同じ問題に悩んだ人が結構いるようです。例えば下記:

Open Browser in Powershell just stopped working
http://stackoverflow.com/questions/5542666/open-browser-in-powershell-just-stopped-working

Error message 800704a6 as part of creating an instance of the COM component
https://blog.nick.josevski.com/2012/01/10/error-message-800704a6-as-part-of-creating-an-instance-of-the-com-component/

ちなみにエラーコード 0x800704A6 を、

System Error Codes (1000-1299)
https://msdn.microsoft.com/en-us/library/ms681383.aspx

で調べてみると、以下のように書かれています。

ERROR_SHUTDOWN_IS_SCHEDULED
1190 (0x4A6)
A system shutdown has already been scheduled.

なので、元々の原因は reboot がスケジュールされたということと何らかの関係があり
そうです。

reboot がスケジュールされる原因の一つに Windows Update がありますので、Azulean
さんが言われるように「ネットカフェのPC」独自の問題のような気がします。

引用返信 編集キー/
■80435 / inTopicNo.10)  Re[8]: ActiveXコンポーネントを作成できません。
□投稿者/ WebSurfer (972回)-(2016/07/18(Mon) 10:33:53)
No80433 (daive さん) に返信

> Any CPU は一見便利ですが、
> 外部DLLなどを扱う場合に、問題を発生させます。

以下の記事の Step 9. の下の方の図の「例3.」のような状況のことを言われてますか?

Part 2. .NET Framework 2.0 アプリケーションの 64 ビット対応
https://blogs.msdn.microsoft.com/nakama/2008/11/05/part-2-net-framework-2-0-64/

「例3.」のような状況ですと全く動かないはずですが、質問者さんのケースでは「発生
率はランダムに50%くらいです」とのことですので、当てはまらないと思います。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

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

管理者用

- Child Tree -