我尝试从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;然后它工作正常。我需要找出原因......
答案 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文件或数据库文件将运行到wix
或wpf
或winform
应用程序。