visual c++ - InnoSetup Script installing VC redistributables and registering VC OCX resulting in "RegSrv32 failed with exit code 0x1" -


my innosetup script needs install vc redistributables (vcredist_x86.exe) registers ocx relying on redist package. wasn't able have package installed prior regsrv32 call, on virgin system results in "regsrv32 failed exit code 0x1" error (which ignore , run setup again correctly register ocx). how can make sure redist package installed before registering?

; script generated inno setup script wizard. ; see documentation details on creating inno setup script files!  [setup] appname=myapp appvername=myapp v1.0 diskspanning=no apppublisher=me apppublisherurl=http://www.example.com appsupporturl=http://www.example.com appupdatesurl=http://www.example.com defaultdirname={pf}\myapp usepreviousappdir=yes defaultgroupname=myapp outputbasefilename=setup outputdir=.\myappsetup minversion=5.0  [tasks] name: desktopicon; description: create &desktop icon; groupdescription: additional icons:; minversion: 4,4  [files] ;source: "c:\program files (x86)\microsoft visual studio 9.0\vc\redist\x86\microsoft.vc90.crt\msvcm90.dll"; destdir: {app}; ;source: "c:\program files (x86)\microsoft visual studio 9.0\vc\redist\x86\microsoft.vc90.crt\msvcp90.dll"; destdir: {app}; ;source: "c:\program files (x86)\microsoft visual studio 9.0\vc\redist\x86\microsoft.vc90.crt\msvcr90.dll"; destdir: {app}; ;source: "c:\program files (x86)\microsoft visual studio 9.0\vc\redist\x86\microsoft.vc90.atl\atl90.dll"; destdir: {app}; ;source: "c:\program files (x86)\microsoft visual studio 9.0\vc\redist\x86\microsoft.vc90.mfc\mfc90.dll"; destdir: {app}; ;source: "c:\program files (x86)\microsoft visual studio 9.0\vc\redist\x86\microsoft.vc90.mfcloc\mfc90deu.dll"; destdir: {app}; ;source: "c:\program files (x86)\microsoft visual studio 9.0\vc\redist\x86\microsoft.vc90.openmp\vcomp90.dll"; destdir: {app};       source: .\systemfiles\vcredist_x86.exe; destdir: {tmp}; flags: deleteafterinstall;    ;-> [run] !!  source: .\release\myapp.exe; destdir: {app}; flags: ignoreversion source: .\release\myapphelper.ocx; destdir: {app}; flags: regserver restartreplace    [icons] name: {group}\easycash&tax; filename: {app}\myapp.exe name: {userdesktop}\easycash&tax; filename: {app}\myapp.exe; minversion: 4,4; tasks: desktopicon  [run] filename: {tmp}\vcredist_x86.exe; parameters: "/q:a /c:""vcredi~3.exe /q:a /c:""""msiexec /i vcredist.msi /qn"""" """; flags: runhidden shellexec waituntilterminated; filename: {app}\myapp.exe; description: launch myapp; flags: nowait postinstall skipifsilent 

for convinience, here code pastebin tlama referred me to:

[setup] appname=my program appversion=1.5 defaultdirname={pf}\my program  [files] source: ".\systemfiles\vcredist_x86.exe"; flags: dontcopy  [code] function isruntimeinstalled: boolean; begin   result := false;   // here statement check whether runtime installed   // , return true if so; see e.g. http://stackoverflow.com/q/11137424/960757 end;  function preparetoinstall(var needsrestart: boolean): string; var   exitcode: integer; begin   // if runtime not installed   if not isruntimeinstalled   begin     // extract redist temporary folder     extracttemporaryfile('vcredist_x86.exe');     // run redist temp folder; if fails, return handler error text     if not exec(expandconstant('{tmp}\vcredist_x86.exe'), '', '', sw_show, ewwaituntilterminated, exitcode)     begin       // return error text       result := 'setup failed install vc++ runtime. exit code: ' + inttostr(exitcode);       // exit function; makes sense if there further prerequisites install; in       // particular example nothing because function exits anyway, pointless here       exit;     end;   end; end; 

Comments