如何在不使用WIX的调用者安装程序的情况下从另一个调用MSI文件

时间:2014-10-16 20:08:27

标签: wix windows-installer

我有一个小问题,就是我必须从另一个MSI文件中调用MSI文件。

它们都是独立的,意味着它们不属于同一装置。

是否可以使用CustomAction进行制作?

我知道如果我使用bootstrapper可以,但我不能这样做。

<

?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*" Name="MySetup" Language="1033" Version="1.0.0.0" Manufacturer="Sofiane" UpgradeCode="c151e7ab-b83a-445f-93b2-2ab7122ea34b">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />

    <Property Id="EXEPATH" Secure="yes"/>

    <Feature Id="ProductFeature" Title="MySetup" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
    </Feature>
    <Binary Id="InstallTools" SourceFile="$(var.SolutionDir)InstallTools\bin\$(var.Configuration)\InstallTools.CA.dll"/>
    <CustomAction Id="SetupProps" BinaryKey="InstallTools" DllEntry="OpenExeUrl" Execute="immediate" Impersonate="yes" Return="check" />
    <CustomAction Id="OpenExe" Return="ignore" Directory="exeDirectory"  ExeCommand="&quot;[EXEPATH]&quot;" Impersonate="yes" Execute="deferred"/>

    <InstallExecuteSequence>
      <Custom Action="SetupProps" Before="OpenExe"/>
      <Custom Action="OpenExe" After="InstallExecute"/>
    </InstallExecuteSequence>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="MySetup" />
      </Directory>
      <Directory Id="exeDirectory" FileSource="@(EXEDIR)" />
    </Directory>
  </Fragment>

  <Fragment>
    <DirectoryRef Id="INSTALLFOLDER">
      <Component Id="myAppFile">
        <File Source="$(var.MyApplication.TargetPath)" />
      </Component>
    </DirectoryRef>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <ComponentRef Id="myAppFile" />
    </ComponentGroup>
  </Fragment>

</Wix>

在自定义操作OpenExe中,EXEPATH是要调用的第二个MSI文件。

请问任何建议?

1 个答案:

答案 0 :(得分:1)

如果您想从CA启动它,可以使用

var process = Process.Start(filePath);

但我不确定它对你有好处吗?

顺便说一下。我不确定它是否会导致安装问题,也许你应该用After="ExecuteAction"参数调用你的CA,我之前做过这件事,我记得唯一的事情就是我有的问题请结束第一次安装错误,该代码修复它我相信。