Why doesn’t Flash/Silverlight work in my .NET Application?


Over the past few months, I’ve run across a number of developers who have reported problems where their .NET application fails to render Flash or Silverlight content within a Web Browser Control.

The most common reason for this problem is that .NET, by default, compiles with a target of AnyCPU, which means that your application will run as a 64bit application if the user is running a 64bit version of Windows. This, in turn, means that the Web Browser Control is the 64bit version, and that, in turn, means that it will attempt to load the 64bit version of Flash or Silverlight. And there’s the problem—Adobe and Microsoft did not, as of the writing of this post don’t currently ship 64bit versions of these controls (both Flash and Silverlight have 64bit versions as of 2012). Unfortunately, most HTML content won’t detect that the browser is 64bit and will instead simply direct the user to install the 32bit ActiveX control (which won’t help).

Obviously, the same problem will occur with all other ActiveX controls which are only available in 32bit flavors, but Flash and Silverlight were are the most common culprits. Until ActiveX control vendors ship 64bit versions of their controls, the only real workarounds are to either avoid using HTML content that requires the controls, or force your application to run in 32bit mode. To accomplish the latter using Visual Studio 2008:

  • Open the Solution Explorer
  • Right-click your project
  • Choose Properties
  • Click the Build tab
  • Change the Platform Target from AnyCPU to x86.

If you don’t have the source to a .NET application and are encountering this issue, you can tweak the executable file to force it to run in x86 mode using CorFlags.exe.

-Eric

Comments (23)

  1. We have a web application having some legacy ActiveX controls developed back in 2002-03. Some of them are from Microsoft, ComponentOne and others were developed here.

    32-bit OS and 32-bit IE 7/8 works fine.

    64-bit OS and 32-bit IE 7/8 again works fine.

    The problem is when we run the web app on 64-bit OS with 64-bit IE 8. When a request is made, it shows yellow strip on top asking to install the ActiveX but it really doesn’t install it. Rather it keeps on asking the same and after multiple attempts it shows red cross in the place holder where the control is placed.

    As I mentioned the controls are quite old and for majority of them we don’t have source. I am just wondering if CorFlags.exe would help us. If not, what would you like to suggest alternatively.

    For the newer version of the application (that we started dev before 4 years), we strictly applied no-activex policy to make sure the app support cross browsers. But unfortunately, in the newer version we have some legacy pages that we must have to support and we can’t just run away with activex controls.

    For the time being, we haven’t added 64-bit IE in our supportability matrix but we may wish to include in near future.

    Your views?

  2. @Dhananjay: Yes, this is exactly the same issue; you’re being asked to install the control because the 64bit version isn’t installed, but since the web page is blindly pointing at the 32bit installer, installing it doesn’t help at all.

    It’s very unlikely that any of these controls were written in .NET, so CorFlags.exe will not help you. You will either need to remove the dependency, get the vendor to release new versions of all of the controls, or not support 64bit IE. It’s important to understand that requiring 32bit IE isn’t unusual– any site that requires Flash, including many major sites like YouTube, will not work in 64bit IE at this time.

  3. Huh, I don’t think we can get a 64-bit version libraries. The current we-dont-support-64bit-IE just works but for permanent solution we will have to migrate our pages.

    Anyways, thanks for making this clear for me so quickly. Appreciate that.

  4. Mike says:

    Of course, a better permanent solution would be Microsoft and Adobe making 64-bit versions of Flash and Silverlight instead. It seems long overdue to me, as the transition to 64-bit computing is well underway. They both seem to be taking forever to get these versions ready, there’s not even beta versions of either yet AFAIK.

  5. EricLaw [MSFT] says:

    @Mike: Shipping 64bit controls would be nice, yes, but it’s not without its own set of problems and tradeoffs.

    As noted in my original post, (http://blogs.msdn.com/ieinternals/archive/2009/05/29/q-a-64-bit-internet-explorer.aspx) web browsers are not typically the sort of things that benefit from a move to 64bit.

  6. Mike says:

    @EricLaw: What kind of problems and tradeoffs are we talking about ? I can appreciate that providing these 64-bit controls means more work for MS/Adobe (although with the shift to 64-bit computing in general, it’s something they have to do at some point anyway), but I wasn’t aware there was any drawbacks to them for users or developers. Am I missing something ?

    Additionally though web browsers in general may not benefit much from 64-bit, I don’t think you can say the same for the WebBrowser control. An application may use the WebBrowser control + Flash/Silverlight just as a small part of the UI for instance, and forcing the app to be 32-bit because of that could be a significant compromise.

    There’s also a potential issue with programs that use third party DLLs, these may not always be available in both 32-bit/64-bit and having your Platform Target choice restricted by web browser plugins may prevent a developer from using a DLL they need.

  7. ieblog says:

    Tradeoffs: >Memory use. >Install size. >Transfer size. Incompatibility. etc, etc.

  8. Anthony says:

    Sounds like IE8 should detect and load 32bit activex controls.

  9. EricLaw [MSFT] says:

    @Anthony: As a general rule, 64bit processes cannot make use of 32bit libraries.

  10. xoggoth says:

    I have tried setting compile/debug target to x86 in both VS2005 and VS2008 Express and it doesn't work. Silverlight is still saying the browser is 64 bit. Anyone got any other ideas on this one? Ta.

  11. EricLaw [MSFT] says:

    @xoggoth: Did you look in Task Manager to see whether or not the application is properly 32bit?  You'll see a * icon after the process name if so.

  12. xoggoth says:

    Thanks EricLaw,  it wasn't. Did a more relevant search and sorted it by  manually editing the vbproj file as here:

    msdn.microsoft.com/…/aa718685.aspx

  13. fatal says:

    Hi,

    Ran into this issue, but changing my target cpu to x86 did not solve the issue, the user still had to install the 64-bit version of flash for it to be useable: labs.adobe.com/…/flashplayer10_square.html

    Any other suggestions?

    VB.net, VS 2008, .Net 3.5

  14. @fatal, if the app is loading the 64bit version, then your user can use taskmgr to confirm that you failed to successfully build your executable targeting x86.

  15. fatal says:

    Hey Eric,

    Thanks for your reply.  The user did confirm to me that the process has a * icon next to it, indicating that the application is indeed 32bit…yet still seems to load the 64bit version of IE.

    He is on Win 7 64-bit running IE9.

    Any ways for me to debug this and see why this is happening?

    Thanks

  16. Sorry– not too sure what to tell you. 32bit processes cannot possibly host the 64bit browser control, and the 32bit browser control cannot possibly host 64bit ActiveX controls.  If you send me the application, I'll have a look. If you navigate the application to http://www.enhanceie.com/ua.aspx, what is the user-agent string?

  17. fatal says:

    Hey Eric,

    Here are 2 screenshots from the user.

    1. dl.dropbox.com/…/5-1-2011%2011-23-13%20AM.jpg – MetaBrowser.exe is the process, and you can see the UserAgent in the screenshot also.

    2. dl.dropbox.com/…/5-1-2011%2011-26-17%20AM.jpg – Browser window directed to YouTube.com, as you can see, it's asking to install Flash Player, although the user already has it installed and is working fine if he uses Internet Explorer to go to YouTube.com

    Take Care

  18. EricLaw [MSFT] says:

    @fatal: The User-Agent string shows that this is a 32bit browser instance. Note that YouTube always shows that message if the Flash AX control cannot be instantiated for any reason, e.g. because it's blocked by an URLAction, Per-Site ActiveX, etc, etc.

    What do you see if you use this process to visit http://www.fiddler2.com/…/ax.

  19. fatal says:

    Hey Eric,

    Here is what the user saw when he navigated to the url you posted: dl.dropbox.com/…/5-2-2011%201-20-52%20PM.jpg

    It seems the active-x isn't even loading or allowed to be installed.

    Now 2 users have verified that installing the 64-bit version of flash fixes the issue for them w/ viewing flash content in the webbrowser control.

    Let me know if you need any more info, it's not that big of a deal, but something that I would like to get to the bottom of if possible.

    Take Care

  20. @fatal: If the user didn't get a prompt to install the control, that suggests that the host in question has a security manager which is saying "no" to various URLAction queries. It's possible that installing the 64bit control twiddled something in the registry (e.g. an allow-list) such that the URLAction query was never made in this scenario. If the application is yours, I'd be interested to understand how the behavior of the security manager is being overridden.

  21. fatal says:

    Hey Eric,

    I'm on a 32-bit machine and even I did not get a prompt.  Although, if not using the webbrowser control and just using MSIE 9.0 in windows, I get the prompt to install the Active-x control.  Although, on my 32-bit version of windows, I have no issues playing flash content from YouTube in my application through the webbrowser control.

    The application is mine, but I am not overriding or doing anything special with anything related to security manager, all I have done is drop the WebBrowser control from the Visual Studio toolbox into my application.

    Take Care

  22. @fatal: Did you set the Silent flag on the control? I have a trivial .NET WebBrowser application (built by dropping the Web Browser Control on a form) and I see the expected UAC prompt for control installation when visiting the link I provided. The http://www.fiddler2.com/…/ax page uses a 32bit browser in a 32bit process and a 64bit control in a 64bit browser.

  23. fatal says:

    Hey Eric,

    I don't have a "Silent" property for my control (prob b/c of security settings set for IE), but I do have a ScriptErrorsSuppressed property, which I had set to true.  So I set that to false, recompiled, and sent it to the user running 64-bit OS.  He uninstalled the 64-bit flash, installed my updated version, and flash started to work for him w/o the need for the 64-bit flash…so ScriptErrorsSuppressed was the culprit, though the property name is a little misleading as to what all it would suppress.

    Thanks for your help.

Skip to main content