winform中判断flash的activex组件是否存在的办法

flash升级到9.0,麻烦也跟着来了,由于原来使用的Activex控件用的是8.5的,而9. 0安装后8.5的控件就无法使用,想来Adobo收购后还未整合好的缘故(刚才实验flash9已经没有任何兼容问题了),无奈之下引出了这篇文章。

先将installshield把flashplayer8打包到安装目录,然后写代码。

try
{
AxShockwaveFlashObjects.AxShockwaveFlash axflash =new AxShockwaveFlashObjects.AxShockwaveFlash();
}
catch
{
System.Diagnostics.Process.Start(Application.StartupPath+ "/Activex/Flashplayer8.exe");
}

但是如果flash的Active组件被卸载之后try里的语句并不会出错。。可能是因为我程序已经引用了flash的dll,所以new没有失败,但是flash的activex组件并不存在,所以失败。。换个方式。。

---------------------------------------------------------------------------

try
{
AxShockwaveFlashObjects.AxShockwaveFlash axflash =new AxShockwaveFlashObjects.AxShockwaveFlash();
axflash.Play();
}
catch
{
System.Diagnostics.Process.Start(Application.StartupPath+ "/Activex/Flashplayer8.exe");
}

用这句则始终出错,不管是否注册了组件。。因为没安装flashplayer。。

-----------------------------------------------------------------------------------

于是我使用了初始化flash控件的代码
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
((System.ComponentModel.ISupportInitialize)(axflash)).BeginInit();
AxShockwaveFlashObjects.AxShockwaveFlash axflash =new AxShockwaveFlashObjects.AxShockwaveFlash();
axflash.ContainingControl = this;
axflash.Enabled = true;
axflash.ImeMode = System.Windows.Forms.ImeMode.Disable;
axflash.Location = new System.Drawing.Point(0, 0);
axflash.Name = "axflash";
axflash.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axflash.OcxState")));
axflash.Size = new System.Drawing.Size(120, 88);
axflash.TabIndex = 0;
axflash.Visible = false;
((System.ComponentModel.ISupportInitialize)(axflash)).EndInit();

这时候也和第一次一样,始终不出错。。

-------------------------------------------------------------------------

用注册表的方式吧,经过监测flashplayer安装后一定有下面两个键值
HKEY_CLASSES_ROOT\CLSID\{D27CDB6E-AE6D-11cf-96B8-444553540000}

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{D27CDB6E-AE6D-11cf-96B8-444553540000} 
卸载后肯定没有。。



RegistryKey keyroot = Registry.ClassesRoot;
string flashkey = @"CLSID\{D27CDB6E-AE6D-11cf-96B8-444553540000}";
RegistryKey rkFlash=keyroot.OpenSubKey(flashkey);
if(rkFlash == null)
{
 System.Diagnostics.Process.Start(Application.StartupPath+Library.Utility.EXEDIRECTORY+ "Activex/Flashplayer8.exe");
}

大功告成。。这也说明了自己在activex控件上知识的不足,继续努力。。相信诸位高手还有更好的办法,请指点。

刚来博客堂,抖抖缩缩第一篇。。呵呵。。

posted @ 2006-08-03 15:56  davieou  阅读(1264)  评论(0)    收藏  举报