Silent install vcredist 2010 and do nothing if already installed - installation

I need to install vcredist_x86|x64.exe 2010 from a batch file to be sure that all the needed dependencies are present in the PC.
If already installed, it should do nothing but it keeps showing the following GUI:
I tried all I've found in MS documentation and examples online but the result is always the same.
Tried /q /quiet /qn /qb /passive /repair.
Is it possbile to tell it to do nothing if already installed?
EDIT
Important detail: I call the batch file from a javascript in a Qt installer.
var vcredistCmd = "#TargetDir#/vcredist.bat";
component.addElevatedOperation("Execute", vcredistCmd, targetDir);
The batch file:
%1\vcredist_x86.exe /q
exit 0

OK, I don't know the reason but I've found the solution.
Executing the file from the directory where it's located, solves the problem.
The batch file:
cd %1
vcredist_x86.exe /q
exit 0

Related

Silent uninstall command for Avira AntiVirus

I'm trying to remove Avira Antivirus from my PC using PDQ deploy and i need a silent uninstall command to do so.The standard command seems to be: "C:\Program Files (x86)\Avira\Antivirus\setup.exe" /REMOVE
but this requires a prompt from the user to complete. I've tried /SILENT, /S /QUIET but no joy. Any ideas?
found it. If anyone needs it it's:
"C:\Program Files (x86)\Avira\Antivirus\setup.exe" /REMSILENTNOREBOOT

VB6 IDE cannot load MSCOMCTL.OCX after update KB 2687323

After windows update installed security update KB2687323, my VB6 project fails to load. Displayed error message is "'[project_vbp_path]/MSCOMCTL.OCX' could not be loaded--Continue Loading Project?". Note that the path in the messeage is the vbp file folder path instead of the control's registered path.
Details:
MSCOMCTL.OCX is registered in the usual system32 folder.
The executable produced by exactly the same project, an hour before the update runs fine and loads the updated MSCOMCTL.OCX (I have checked it with Process Explorer).
The security update description states that MSCOMCTL.OCX has a new fixed version. So I checked the project properties for "Upgrade ActiveX Controls" checkbox. I tried it both ways; checked and unchecked to no avail. VB6 IDE refused to load the upgraded OCX.
After hours of effort, system restore, register, unregister cycles and a night's sleep I have managed to pinpoint the problem. It turns out that the project file contains the below line:
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX
The version information "2.0" it seems was the reason of not loading. Changing it to "2.1" in notepad solved the problem:
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.1#0; MSCOMCTL.OCX
So in a similar "OCX could not be loaded" situation one possible way of resolution is to start a new project. Put the control on one of the forms and check the vbp file with notepad to see what version it is expecting.
OR A MUCH EASIER METHOD:
(I have added this section after Bob's valuable comment below)
You can open your VBP project file in Notepad and find the nasty line that is preventing VB6 to upgrade the project automatically to 2.1 and remove it:
NoControlUpgrade=1
The problem has been resolved by running the following in elevated command prompt:
command :
cd C:\Windows\System32\
regtlib msdatsrc.tlb
or
cd C:\Windows\SysWOW64\
regtlib msdatsrc.tlb
I hope this helps.
The problem:
Microsoft Office 2010 products (or later) install updates that break compatibility of MSCOMCTL.ocx and COMCTL32.ocx. Unfortunately this affects many other programs such Visual Basic 6 SP6 and even Oracle Virtual Box v5. The actual problem is HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0 registry key. You can find detailed background information about this problem here.
Here is another working solution:
The solution assumes you have not damaged your registry by deleting, replacing and re-registering MSCOMCTL.ocx and COMCTL32.ocx without unregistering the Office patch files.
Create a batch file called fix.cmd and place the following commands in it:
regsvr32 /s /u %windir%\SysWOW64\comctl32.ocx
regsvr32 /s /u %windir%\SysWOW64\mscomctl.ocx
del /y %windir%\SysWOW64\comctl32.ocx
del /y %windir%\SysWOW64\mscomctl.ocx
msiexec /passive /norestart /i KB2708437.msi
msiexec /passive /a KB2708437.msi
regtlib %windir%\SysWOW64\msdatsrc.tlb
Download from Security update for Visual Basic 6.0 Service Pack 6: August 14, 2012 the msi file and rename it to KB2708437.msi.
Note: A direct link to the Service Pack 6 download is located HERE.
Run fix.cmd and the problem will be fixed!
What fix.cmd does is to properly unregister and then delete the current MSCOMCTL.ocx and COMCTL32.ocx files, and then apply the latest Visual Basic 6 SP6 rollup patch. In fact, the script enforces the patch to be installed and then re-installed by updating every file, regardless of version. Finally it registers msdatsrc.tlb type library.
Please let me know if this works for you.
======================================================================
Advanced Solution:
If however you have accidentally damaged your registry, you need to get as many versions of MSCOMCTL.ocx and COMCTL32.ocx you can find. Then you need to start from the newer version going back to the older and register and unregister the ocx files.
The latest version of MSCOMCTL.ocx is 6.1.98.39 (v2.1) of May 2012 which is more likely the one installed on your system and causing all your problems.
The oldest (legacy) version is that shipped with Visual Basic 6 on 1998 6.1.97.82 (v2.0), or the one shipped with an early service pack 6.1.97.86 on April 2005.
Example:
regsvr32 /s comctl32.6.0.98.34.ocx
regsvr32 /s /u comctl32.6.0.98.34.ocx
regsvr32 /s comctl32.6.0.81.6.ocx
regsvr32 /s /u comctl32.6.0.81.6.ocx
regsvr32 /s comctl32.6.0.81.5.ocx
regsvr32 /s /u comctl32.6.0.81.5.ocx
regsvr32 /s mscomctl.6.1.98.39.(2.1).ocx
regsvr32 /s /u mscomctl.6.1.98.39.(2.1).ocx
regsvr32 /s mscomctl.6.1.98.34.ocx
regsvr32 /s /u mscomctl.6.1.98.34.ocx
regsvr32 /s mscomctl.6.1.97.86.ocx
regsvr32 /s /u mscomctl.6.1.97.86.ocx
regsvr32 /s mscomctl.6.1.97.82.(2.0).ocx
regsvr32 /s /u mscomctl.6.1.97.82.(2.0).ocx
regsvr32 /s /u %windir%\SysWOW64\comctl32.ocx
regsvr32 /s /u %windir%\SysWOW64\mscomctl.ocx
del /q %windir%\SysWOW64\comctl32.ocx
del /q %windir%\SysWOW64\mscomctl.ocx
msiexec /passive /norestart /i KB2708437.msi
msiexec /passive /a KB2708437.msi
regtlib %windir%\SysWOW64\msdatsrc.tlb
WARNING:
Do not search the internet for those files. To find different version of the OCX files download and extract official Microsoft Installer packages such as the following:
2005 Apr - Microsoft KB896559
2008 Dec - Microsoft KB926857
2009 Apr - Microsoft KB957924
2012 May - Microsoft KB2708437
It is also recommended to run CCleaner version 4.0 or later to fix any other ActiveX related problems on your computer.
To Fix the Problem:
Make a Batch file with the following code:
#echo off
reg query "HKEY_CLASSES_ROOT\typelib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.1"
if %errorlevel%==0 GOTO DELREGKEY
if %errorlevel%==1 GOTO REGISTEROCX
:DELREGKEY
reg delete hkcr\typelib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0 /f
:REGISTEROCX
if exist %systemroot%\SysWOW64\cscript.exe goto 64
%systemroot%\system32\regsvr32 /u mscomctl.ocx /s
%systemroot%\system32\regsvr32 mscomctl.ocx /s
exit
:64
%systemroot%\sysWOW64\regsvr32 /u mscomctl.ocx /s
%systemroot%\sysWOW64\regsvr32 mscomctl.ocx /s
exit
I use win7 and has same problem.
Today I solved this problem, through loading with many error with my project just give order to continue after that goto Project=> Component => Microsoft Windows Common Controls 6.0 (SP6) then save the project (file use was c:\windows\syswow64\mscomctl.ocx)
The solution for me is to install this VB6 patch. I'm on Server2008 (32-bit).
http://www.microsoft.com/en-us/download/details.aspx?id=10019
It makes me sad that we're still talking about this in 2014... but here it is. :)
From puetzk's comment: These are outdated: you want to be using Microsoft Visual Basic 6.0 Service Pack 6 Cumulative Update (kb957924).
I do not find NoControlUpgrade=1 on my vbp project.
Instead, I develop on both xp and windows7 x64. When I moved the project from window 7 to xp, the error occurred.
From what I find out, these are different:
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.1#0; MSCOMCTL.OCX
I just changed the #2,1 back to #2.0 on the vbp file and it can run immediately.
These kind of problems occurred before, so hope Microsoft explain and solve them accordingly.
Thanks.
On some computers, I've found that the "2.0" version of MSCOMCTL.OCX has been added to the ActiveX KillBits list, and thus the control won't be allowed to load or run--even in design view. Updating to the "2.1" version will resolve this, and is the recommended solution.
In critical cases, where you have to run a program "now", or you don't have access to source code, or the control is used 400 times in a large modular project, you can use a "big hammer" method and update the registry to re-enable the control:
**
WARNING: Editing the Windows Registry in the wrong way can mess up your computer big time. If you're not sure what you're doing, please leave it alone, or get some schooling before you proceed.
**
The clear the KillBit:
Run Registry Editor (regedit.exe or regedt32.exe)
In the left-hand panel, navigate to key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX
Compatibility{BDD1F04B-858B-11D1-B16A-00C0F0283628}
In the right-hand panel, double-click on “Compatibility Flags”, change the value from Hex 0x400 (Decimal 1024) to 0, then click OK.
Launch the application that uses the "2.0" version of MSCOMCTL.OCX; it should run as designed.
The ActiveX KillBits list is intended to give Microsoft the means to disable controls that are deemed to be a security risk, and they've designed the mechanism such that the ActiveX KillBits list will be re-applied to the system at seemingly random times, in addition to when an Update is installed, so you'll need to plan for re-applying the registry change. Making a registry merge file works pretty well, but it's not something you want to do everytime the app runs, because it's not a quiet process (there are ways to do this quietly using Windows Scripting, but you'll have to learn that on your own). The KillBit is checked only when the control is requested by an application, so you're safe from resets once the application launches and loads the control.
You may try to check your registry
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}
If it is 2.1 version, it will cause cannot load MSCOMCTL.OCX issue.
You may restore to 2.0 verion (not only copy the file, you should unregiser 2.1 and register the restored file)
Or
You may try latest 2.2 version
https://support.microsoft.com/en-us/kb/3096896 (file date: 5-Nov-2015)
https://www.microsoft.com/en-us/download/details.aspx?id=50722
Some version information :
6.0.88.62 (2.0)
6.1.97.82 (2.0)
6.1.98.34 (2.1) <<< not work for me
6.1.98.46 (2.2)
Same problem with VBA Macros using MSCOMCTL.OCX.
Problem still unresolved with solutions like "reg/unreg mscomctl.ocx"
Used the Info above of Rumi.
Edited my *.dot file, search for #2.0#0, change it to #2.1#0
--> it worked
I had this problem and tried many different solutions. They didn't work for me although I think this error occurs for a couple of different reasons. My solution is in my answer to this question here:
https://stackoverflow.com/a/15785253/2240058
Its worth a try if nothing else is working for you.
This problem mysteriously appeared for me today. I hadn't done any Windows updates, so I don't know the cause.
This fixed it (in elevated command prompt):
regtlibv12.exe msdatsrc.tlb
For me, this solution worked like a charm:
http://home.pacific.net.hk/~edx/bin/readmeocx.txt
Fix these two lines like that:
Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; COMDLG32.OCX
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX
Search the files (.vbp and .frm) for lines like this:
Begin ComctlLib.ImageList ILTree
Begin ComctlLib.StatusBar StatusBar1
Begin ComctlLib.Toolbar Toolbar1`
The lines may be like this:
Begin MSComctlLib.ImageList ILTree
Begin MSComctlLib.StatusBar StatusBar1
Begin MSComctlLib.Toolbar Toolbar1`
I recently put all my source on a windows 8 32 box. Had the issues loading mscomctl.ocx with existing projects.
I created a new project and add the common control (all). save the project and reloaded it no problem.
when you compare the project headers new vs old the old one uses reference=*\blah blah. I found removing this a replacing it with the Object={blah} sorted out the problem.
I continued to have problems after trying the things suggested here. In the end, it turned out that I had the wrong version of mscomctl.ocx in my SysWOW64 folder. I found the following versions kicking around:
Mar. 09, 2004 01:00 AM 1,081,616 mscomctl.ocx
Jun. 06, 2012 07:59 PM 1,070,152 mscomctl.ocx
Dec. 08, 2015 03:57 AM 1,070,232 MSCOMCTL.OCX
Getting the last one (1,070,232) solved this problem for me.
I had similar trouble, have a program running for last 10 years written in VB6, now client wanted to make some major modifications, and all my machines which are now windows 10; failed to open the project, it was always that nasty mscomctl.ocx error. I had done lot of things but could not solve the problem. Then I thought the easy way around, I downloaded the latest mscomctl (
Then opened a new project, added all the components like mscomctl, activx controls etc, saved it and opened this newly created project file in Notepad, then copied the exact details and replaced in the original project.... and bingo! The old project opened up normally without any fuss! I hope this experience will help someone.
In my case didn't work any solution above. Near to give up, removed any reference (using Arvo Bowen's fix.cmd file) and tried pasting mscomctl.ocx (version 6.1.97.86) in C:\Program Files (x86)\Microsoft Visual Studio\VB98 folder. It worked finally after more than 4 or 5 hours fighting for a solution.

Installling.exe using MSIEXEC in NSIS (Program doesn't install at all)

I try to install a program (.exe)in the NSIS Script here is my code
;Install PDFXVIEWER
SetOutPath "$INSTDIR\PdfViewer"
File /r "file\PdfViewer\PDFXV.exe"
ExecWait 'msiexec /i "file\PdfViewer\PDFXV.exe" /VERYSILENT /NORESTART /DIR="$INSTDIR\PdfViewer"'
However, during the installation i got a windows installer popup ! :
http://i.stack.imgur.com/g8Gdh.jpg
and the program is not installed at all.
Can anyone point me my error??
thanks
msiexec is for installing .msi files (And remember to use full paths). You should be able to execute the .exe file normally...
exec doc:
Note that the file specified must exist on the target system, not the compiling system.
"file\PdfViewer\PDFXV.exe" is the file on the compiling computer, not the target system, you should change it to "$INSTDIR\PdfViewer\PDFXV.exe"

Silent Installation of setup.exe

I'm trying to run a silent installation for a couple of setup.exe. I searched for this topic and the suggested command was:
setup.exe /q
I ran the command and still received the setup wizard. The applications I'm trying to install are VB6 apps. I believe the installers where created using the Package & Deployment Wizard tool. I'm unsure if this has anything to do with it.
To do a silent install, you have to use the following syntax (with log file) :
setup.exe /s c:\yourlogfilename.log
You must include the full path after /s which will launch a silent installation.
The only thing which could interupt the silent installation is the "Setup is attempting to copy a file that is older than the one currently..." dialog box.
I believe the "s" switch should be used. setup.exe /s should work, but if not, you can try setup.exe /silent. If you want a log add a path to the log file after the switch.
Try
setup.exe /sc:\path\to\yourlogfilename.log<br />
In Visual Basic installers there must be no blank between /s and the path for log file.

Can I configure an MSI to install silently to a non-default directory?

I have a vendor supplied MSI file, and we want to automate the install to a couple thousand pcs/servers. Unfortunately, we would like to install it to our default apps directory, which is not c:\program files. Is there a way to do this easily? I'm experimenting with Orca, but I'd rather get a solid method on how to do this quickly and easily.
Thanks in advance for any help.
You can specify the target directory on the command line:
msiexec /i /qn setup.msi INSTALLDIR=c:\customfolder\program\

Resources