3

我尝试从 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>

在包节点之后 - >然后它工作正常。我需要弄清楚为什么...

4

3 回答 3

5

我对您在这里所做的事情还有其他一些顾虑,但是如果您确实需要退出进程到 EXE 来完成安装,那么我建议您使用Quiet Execution Custom Action

尽管出于多种原因,您应该知道这不是一个好的做法。1)它不是声明性的,2)它不支持回滚。还有其他的,但那些是最大的 IMO。

顺便说一句,WiX 不是“脚本”。明白这一点,你就会明白为什么不调用 EXE。

于 2012-06-25T15:41:16.990 回答
0

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

可以使用 PowerShell 来解决这个问题,使用 -RunAs 开关执行 exe,但这有点讨厌。这实际上完全取决于您在 exe 中所做的最佳行动方案。我和Painter先生在一起,使用EXE应该是最后的手段。

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

于 2012-06-25T16:38:34.397 回答
0

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

于 2018-03-27T10:59:27.657 回答