title: MSI Error - Failure of regsvr32 custom action
body: <h2>Brief</h2>
  
  <p>I have an installation package (MSI based) which attempts to register a dll file for use as a Windows Explorer Bar (Internet Explorer Toolbar).</p>
  
  <p>The custom action is defined as follows:</p>
  
  <pre><code>[SystemFolder]\regsvr32.exe /s "pathtodllhere"
  </code></pre>
  
  <h2>The error</h2>
  
  <ul>
  <li>The regsvr32 custom action does <strong>not</strong> work on Windows XP 64-bit.</li>
  </ul>
  
  <p>Output from MSI log:</p>
  
  <blockquote>
    <p>CustomAction SystemFolder_2 returned actual error code 5. Error
    1722. There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Action SystemFolder_2,
    location: C:\Windows\SysWOW64\, command: regsvr32.exe /s "C:\Program
    Files (x86)\Test Install\test.dll"</p>
    
    <p>MSI (s) (10:F4): Product: Test Install -- Error 1722. There is a
    problem with this Windows Installer package. A program run as part of
    the setup did not finish as expected. Action SystemFolder_2, location:
    C:\Windows\SysWOW64\, command: regsvr32.exe /s "C:\Program Files
    (x86)\Test Install\test.dll"</p>
  </blockquote>
  
  <p>A brief run-down of my tests/thoughts thus-far:</p>
  
  <ul>
  <li>Custom action is in the "InstallFinalize" section, it is therefore run ONLY when the files have been dropped onto the hard drive.</li>
  <li>Dll file is <strong>not</strong> corrupt and is valid.</li>
  <li>Regsvr32 custom action works fine (and MSI installation) on: Windows 7 32-bit and Windows XP 32-bit.</li>
  <li>Regsvr32 32-bit version is executed during 64-bit install (as it should).</li>
  <li>Regsvr32 fails with error code 5, i.e. ERROR_ACCESS_DENIED.</li>
  </ul>
  
  <h2>Solutions and Musings</h2>
  
  <ol>
  <li>Self-registration - Not using regsvr32 and manually place the registry keys using my MSI Installer.</li>
  <li>The dll is a Delphi COM dll which uses the TRegistry component to register itself. Again, I can't think of a reason why this wouldn't work as it is merely a wrapper, but just a thought.</li>
  </ol>
  
  <p>Hopefully I have shown my research here and don't waste anyone's time!</p>