在WiX中执行EXE文件

时间:2012-06-25 10:17:49

标签: installer wix windows-installer

我尝试从WiX中的MSI文件执行EXE文件,但在执行InitializeSetup时出现1603错误。

Action ended 12:09:54: InstallValidate. Return value 1.
Action start 12:09:54: InstallInitialize.
Action ended 12:09:54: InstallInitialize. Return value 3.
Action ended 12:09:54: INSTALL. Return value 3.

这个WiX脚本出了什么问题?

 <Product Name='something' Id='11934d63-12d1-4792-829e-046de3bb987e'
  UpgradeCode='{a101616a-365c-44a7-bfcb-fafb356c2ea1}'
  Language='1033' Version='8.3.4' Manufacturer='something2'>

    <Package Id='*' InstallerVersion='200' Compressed='yes' />

    <Binary Id="Instalator.exe" SourceFile="d:\Instalator.exe"/>
    <CustomAction Id="LaunchFile" BinaryKey="Instalator.exe" ExeCommand="" Execute='deferred' Return='asyncNoWait' Impersonate='no'/>
    <InstallExecuteSequence>
        <Custom Action='LaunchFile' Before='InstallFinalize'/>
    </InstallExecuteSequence>
 </Product>

我不知道为什么,但是当我添加:

<Directory Id='TARGETDIR' Name='SourceDir'>
        <Component Id='MainExecutable' Guid='1193cd63-12d1-4792-829e-046de3bb987e'>
        </Component>
</Directory>

<Feature Id='Complete' Level='1'>
  <ComponentRef Id='MainExecutable' />
</Feature>

在Package节点之后 - &gt;然后它工作正常。我需要找出原因......

3 个答案:

答案 0 :(得分:5)

我还有一些关于你在这里做什么的担忧,但是如果你真的需要退出EXE以完成安装,那么我建议使用Quiet Execution Custom Action

你应该知道,由于种种原因这不是一个好习惯。 1)它不是声明性的,2)它不支持回滚。还有其他人,但那些是最大的IMO。

BTW,WiX不是“脚本”。了解这一点,你就会理解为什么不给EXE打电话。

答案 1 :(得分:0)

因为您将exe作为延迟操作运行,所以它在SYSTEM帐户的上下文中运行。此错误是由于系统帐户在文件系统http://support.microsoft.com/kb/834484上没有所需权限。

使用PowerShell可以使用-RunAs开关来执行exe,但这有点令人讨厌。这真的完全取决于你在exe中做了什么,以及最好的行动方案。我和画家先生在一起,使用EXE应该是最后的选择。

另一种选择是移动exe设置代码,使其在用户第一次运行应用程序时运行。

答案 2 :(得分:0)

WIX 的重要说明,完成所有应用程序安装后,.sql文件或数据库文件将运行到wixwpfwinform应用程序。