views:

20

answers:

1

Hello,

I'm creating an MSI installer using WiX and I have, say, a *.bat file that I'm copying to SomeFolder2 under %temp% (something like the code snippet below...)

...

    <Directory Id='TARGETDIR' Name='SourceDir'>
       <Directory Id='ProgramFilesFolder' Name='PFiles'>
          <Directory Id='MyDir' Name='SomeFolder'>

          <!-- %TEMP -->
          <Directory Id="TempFolder" Name="TmpFolder">
             <Directory Id='MyDir2' Name='SomeFolder2'>

                <!-- CREATE THE %TEMP%\SomeFolder2 FOLDER -->
                <Component Id='FolderComponent' Guid='{GUID}'>
                   <CreateFolder />
                </Component>

                <Component Id='CheckComponent' Guid='{GUID}'>
                   <File Id='mybat' Name='mybat.bat' DiskId='1' Source='.\mybat.bat' KeyPath="yes">
                      <Shortcut Id="mybatShcut" Directory="ProgramMenuDir" Name="{name}" WorkingDirectory='INSTALLDIR' Advertise="yes" />
                   </File>
                </Component>
             </Directory>
          </Directory>
       </Directory>
    </Directory>
</Directory>

...

Now, to run this, I have 2 custom actions (DESTDIR is %TEMP%\SomeFolder2):

<CustomAction Id="SetPath" Property="ThePath" Value="[DESTDIR]\mybat.bat" />
<CustomAction Id="StartAction" Property="ThePath" ExeCommand="" Return="asyncNoWait" />

Then in the install sequence:

<InstallExecuteSequence>
       <Custom Action="SetPath" After="{some standard MS action}">NOT REMOVE="ALL"</Custom>
       <Custom Action="StartAction" Before="{some other action}">NOT REMOVE="ALL"</Custom>
...
    </InstallExecuteSequence>

I've put SetPath to run after a variety of standard actions (e.g. PublishProduct) while StartAction will come before another custom action.

When I run the msi, I look in the log and ThePath does get set with the correct path. However, when StartAction is run, I get this error:

Return value 1631.

which, according to the docs, translate to "ERROR_CREATE_FAILED" (The Windows Installer service failed to start. Contact your support personnel.) Thing is, the file did get copied to %TEMP%\SomeFolder2 (before the setting of the path and the actual exection, might I add...) but for some reason, it doesn't execute at all (If you do execute it manually or via the command prompt or whatnot, it does execute normally).

I tried putting the same file under ProgramFiles\Some_Directory_For_The_Program. Same thing, it gets copied there but it doesn't execute. Any ideas on why this is happening?

Thanks in advance

+1  A: 

First off, as long as you'd like to use a file installed by your package in custom action, you should make it deferred. That is, StartAction CA in your example must be deferred. Also, I try to use QtExec standard CA when I need to run executables from CA.

Hope this helps.

Yan Sklyarenko
That *reaaaaally* helped! It worked, finally :D Thanks a lot!!!
callie16