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控件上知识的不足,继续努力。。相信诸位高手还有更好的办法,请指点。
刚来博客堂,抖抖缩缩第一篇。。呵呵。。

浙公网安备 33010602011771号