MSCOMCTL.OCX errors occur when a legacy 32-bit application cannot find or register the VB6 ActiveX control. On 64-bit Windows, place the verified file in C:\Windows\SysWOW64 and register it with the 32-bit regsvr32 from that folder; use System32 for 32-bit Windows, and never download an untrusted replacement DLL or OCX.
How to Fix the MSCOMCTL.OCX Error on Windows 10 and 11
Learn how to fix the MSCOMCTL.OCX missing or not registered error on Windows 10 and 11. Step-by-step solutions including manual registration and VB6 download.
// The short answer
In this guide · 5 sections
If you’re running into run-time error 339 telling you that MSCOMCTL.OCX is missing or not registered properly, don't worry - it’s actually a really common headache. Basically, modern versions of Windows 10 and 11 don't ship with these old Visual Basic 6.0 ActiveX controls pre-installed anymore, so older apps suddenly find themselves stranded without their basic UI building blocks.
Where it happens: Windows 10 (Build 10586 and newer) and Windows 11
The usual culprit setup: Almost always 64-bit Windows trying to run an older 32-bit legacy program
Where the file belongs on 64-bit Windows:
C:\Windows\SysWOW64\mscomctl.ocxWhere the file belongs on 32-bit Windows:
C:\Windows\System32\mscomctl.ocxWhat breaks when it's gone: Common UI elements like ListView tables, TreeView folder structures, ToolBars, TabStrips, Sliders, and ImageCombos
Step 1: Figure Out What’s Actually Wrong (Missing vs. Just Unregistered)
Whenever this pops up, people's first instinct is to immediately Google the filename and grab a copy from the first download link they see. Honestly, please don’t do that yet. Aside from handing your PC over to sketchy file sites, the file might actually be sitting on your hard drive right now - it just never got introduced to the Windows registry properly.
Fire up File Explorer and head to your main Windows drive. If you’re running a 64-bit version of Windows (which you probably are), go straight to the SysWOW64 folder. If you're on an older 32-bit setup, head into System32 instead.
Take a quick look through the folder to see if mscomctl.ocx is already sitting there. Knowing this completely changes how you tackle the problem.
If it’s already there, you don't need to hunt down a file at all - you just need to register it. If the folder is totally empty of that file, then yes, you actually are missing the dependency.
If you’re still getting weird errors and can’t tell what's breaking under the hood, an old utility called Dependency Walker (depends.exe) can show you exactly which nested file is choking. Microsoft stopped updating it a while ago, but it still runs fine on modern setups and catches tricky version clashes that File Explorer won't reveal.
How to Fix MSCOMCTL.OCX Errors on Windows 10 & 11
Method 1: Grab the File Directly From Your App's Installer (The Safest Way)
Here’s a handy trick: most legacy software developers already bundled all these required ActiveX files straight into their installer setup packages. The problem is that modern Windows permissions frequently block those ancient setup wizards from dropping system files directly into your Windows directory.
You can easily unpack the installer yourself to get around this. Grab an extraction tool like 7-Zip, right-click the setup file for your program, and choose to open or unpack the archive.
Dig through the extracted folders until you spot mscomctl.ocx. Once you’ve located it, just copy and paste it into the proper system folder:
64-bit Windows:
C:\Windows\SysWOW64\32-bit Windows:
C:\Windows\System32\
Windows will prompt you for administrator permission to drop anything into those protected system folders, so just click continue. Once it's in place, you'll still need to register it via Method 2 below.
Method 2: Register the Control With Command Prompt (Regsvr32)
Dropping the file into the folder is only the first half of the fix. Windows doesn’t automatically scan those system directories for new controls, so your apps still won’t know it exists until you explicitly register it through the built-in Register Server utility.
Hit your Windows key, type cmd, then make sure you right-click Command Prompt and pick Run as administrator. Don't skip that admin step - if you run it as a regular user, Windows will immediately throw an access error and fail.
If you are on 64-bit Windows, paste this command and hit Enter:
DOS
regsvr32 C:\Windows\SysWOW64\mscomctl.ocxIf you are running a 32-bit install of Windows, paste this one instead:
DOS
regsvr32 C:\Windows\System32\mscomctl.ocxYou should see a clean little pop-up window confirming that DllRegisterServer succeeded. Once that shows up, close out the prompt and try launching your app again.
Method 3: Grab Microsoft’s Official VB6 Security Rollup (KB3096896)
Whatever you do, resist the urge to download random system files from generic "free DLL/OCX" sites. Half the time they’re packed with junk, and the other half they hand you an ancient, insecure version of the file that causes even more bugs.
Microsoft actually keeps a completely legitimate, signed package for these legacy controls right in their official catalog. Look up KB3096896 on the Microsoft Update Catalog to pull down version 6.1.98.46, which is the official final security rollup release for these files.
When you run that official installer, it automatically drops the files into their correct paths and registers them under the hood without you having to touch the command line. It’s easily the cleanest route if the file wasn't bundled with your app and you want a clean, trusted download straight from Microsoft.
What to Do If Regsvr32 Succeeded but the App Still Crashes
Sometimes you get that satisfying "registration succeeded" pop-up, but the app still crashes with error 339. When that happens, UAC (User Account Control) virtualization is usually the culprit - it essentially cordons off registry keys so older programs run with regular permissions can’t read what you just registered.
The quickest way around that sandbox is to give the legacy software elevated privileges. Right-click your application's desktop icon, jump over to the Compatibility tab, and toggle on the option to always run the program as an administrator.
It's very similar to what triggers that notorious 0xc000007b error on Windows: bit-depth mismatches cause silent crashes. If you’re dealing with this inside Microsoft Office macros, make sure the bitness of your Office install matches your ActiveX file. A 64-bit build of Excel simply cannot load or interact with a 32-bit OCX control directly.
Watch Out: Office Might Be Hiding Its Own Copy
If you recently installed or updated Office, you might find that it quietly stashed its own private copy of mscomctl.ocx inside C:\Program Files\Microsoft Office\root\vfs\system. Because that copy sits inside an isolated Office directory, Windows won't expose it system-wide, leaving your other legacy software complaining that it can't find the file.
If you spot it in there, copy it over to your SysWOW64 (or System32) directory first before trying to register it. Running regsvr32 directly against that internal Office path usually throws an error anyway, because Windows treats those virtualized package paths very differently from actual system locations.
Version conflicts can also sneak up on you here. Certain older VB6 apps were compiled against a specific minor build - like 6.1.98.39 - and will stubbornly refuse to hook into a newer version like 6.1.98.46 from the KB update. It pays to right-click the OCX, open Properties, and check the Details tab to see what version you’re working with before you tear your hair out over registration commands.
Don't Confuse MSCOMCTL.OCX With MSCOMCT2.OCX
A lot of people accidentally mix these two up when troubleshooting because the names look practically identical at a glance. But under the hood, they are two completely separate libraries responsible for entirely different interface controls.
The one you’re dealing with - MSCOMCTL.OCX - handles core layouts like list views, tree structures, toolbars, and sliders. If your app uses any kind of modern table or tree-style data grid, this is the library making it draw to the screen.
On the other hand, MSCOMCT2.OCX covers date and time pickers - things like the classic MonthView drop-down calendar, the little up/down spinner arrows, and timestamp fields. Replacing or registering one won't do a thing if your program is asking for the other, so double-check the exact spelling in your error dialogue.
If your app happens to use both and both are unregistered, you’ll just need to run the regsvr32 command twice - once for each file. The process is completely identical, you just swap the file names.
And if you ran into this while working with Excel macros and your workbook is a mess, this guide on removing blank rows in Excel walks through the safest ways to tidy it up without breaking your formulas.
Quick answers
Frequently asked questions
Where can I safely download MSCOMCTL.OCX for Windows 10?
The safest source is the official Microsoft Update Catalog. Search for KB3096896 on catalog.update.microsoft.com to download the Visual Basic 6.0 Common Controls security rollup directly from Microsoft. Avoid third-party DLL download sites, which frequently bundle malware with outdated file versions.
What is the difference between MSCOMCTL.OCX and MSCOMCT2.OCX?
They are separate libraries. MSCOMCTL.OCX handles standard controls like ListView, TreeView, ToolBar, and Slider. MSCOMCT2.OCX handles date and time components: MonthView, UpDown spinners, and DateTimePicker. If your error message names a specific file, only that file needs to be fixed.
Why does MSCOMCTL.OCX error appear on Windows 10 and 11?
Windows 10 and 11 do not ship with legacy Visual Basic 6.0 ActiveX libraries. Applications built with VB6 expect these files to exist in the system directory, so when they are absent or not registered, the app throws a run-time error 339 and refuses to launch.
Does Regsvr32 need to run as administrator for OCX files?
Yes. Without administrator privileges, Regsvr32 cannot write the required entries to the Windows registry. The command will return an error code immediately. Always open Command Prompt by right-clicking and selecting Run as administrator before running the regsvr32 command.
Regsvr32 says DllRegisterServer succeeded but the app still crashes. What now?
This usually means UAC virtualization is isolating the registry change from the application. Try right-clicking the application shortcut, go to Properties, open the Compatibility tab, and check the box to always run as administrator. Also verify that the bit version of the app matches the OCX file location: 32-bit apps must use the SysWOW64 path on 64-bit Windows.
Which folder should MSCOMCTL.OCX go in on 64-bit Windows?
On 64-bit Windows, place the file in C:\Windows\SysWOW64. This is the correct location for 32-bit ActiveX controls on a 64-bit system. Using System32 instead will cause registration to fail or the application to still report the file as missing.
Why is mscomctl.ocx inside my Microsoft Office folder instead of System32?
Recent Office installs sometimes place their own copy in C:\Program Files\Microsoft Office\root\vfs\system, which Windows never registers for other applications. Copy the file into SysWOW64 (64-bit) or System32 (32-bit) and register it from there instead.
I registered mscomctl.ocx but the app says it needs a different version. What now?
Check the file version on the Details tab of its Properties dialog. VB6 apps are often hardcoded to a specific build like 6.1.98.39, and a newer file from KB3096896 (6.1.98.46) can still trigger a version error. Replace it with the exact version your app expects.
Something wrong or out of date?
Tools change fast. Tell the editor what no longer works.