[英]Wix MSI Only Works on One Computer
我最近完成了我的第一个Wix Intaller,但是我有一个问题,我的MSI文件仅在我的计算机上有效,我正在生成嵌入式CAB文件。 我正在安装程序中注册DLL。 我收到错误消息:“此Windows Installer软件包存在问题。作为安装程序一部分运行的程序未按预期完成。” 这就是为什么我认为DLL是问题的一部分的原因。 我在下面提供了一些代码段,如果您需要查看更多代码段,请告诉我,谢谢!
DLL安装的自定义操作:
<Product Id="*" UpgradeCode="12345678-1234-1234-1234-111111111111"
Name="FP7000 Camera App" Version="1.0" Manufacturer="Stryker Corp" Language="1033">
<Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package"/>
<Media Id="1" Cabinet="product.cab" EmbedCab="no"/>
<!--Installing/Uninstalling Supporting Programs and DLLs-->
<CustomAction Id="RegisterFP7000"
Directory="dirCF50D58BC65CC93005501980AACC3EDD"
ExeCommand='C:\Windows\system32\regsvr32.exe /s "C:\Projects\Stryker\Install Files\DLLs\FP7000-Camera.dll"'>
</CustomAction>
<CustomAction Id="UnregisterFP7000"
Directory="dirCF50D58BC65CC93005501980AACC3EDD"
ExeCommand='C:\Windows\system32\regsvr32.exe /s /u "C:\Projects\Stryker\Install Files\DLLs\FP7000-Camera.dll"'>
</CustomAction>
<CustomAction Id="InstallSDK"
Directory="dirCF50D58BC65CC93005501980AACC3EDD"
ExeCommand='C:\Windows\system32\msiexec /i "C:\Projects\Stryker\Install Files\Included Apps\Intel_Media_SDK_2016_R2.msi" /quiet'
Execute='deferred'
Impersonate='no'
Return='asyncNoWait'>
</CustomAction>
<CustomAction Id="UninstallSDK"
Directory="dirCF50D58BC65CC93005501980AACC3EDD"
ExeCommand='MsiExec.exe /X{C39967EA-A3DB-4B49-9BCA-74E4D0007533}'
Execute='deferred'
Impersonate='no'
Return='asyncNoWait'>
</CustomAction>
安装顺序:
<InstallExecuteSequence>
<Custom Action="RegisterFP7000" After="InstallFinalize">NOT Installed</Custom>
<Custom Action="UnregisterFP7000" Before="InstallFinalize">REMOVE="ALL"</Custom>
<Custom Action="InstallSDK" After="InstallFiles">NOT Installed</Custom>
<Custom Action="UninstallSDK" Before="InstallFinalize">REMOVE="ALL"</Custom>
</InstallExecuteSequence>
这种注册失败通常是因为Dll缺少依赖项(假设其他所有方法都正确)而无法加载。 其他问题可能包括运行regsvr32的位数错误(例如64位版本)并尝试注册32位Dll。
无论如何,都不需要这样做。 最佳做法和推荐方法是使用Heat.exe将注册数据收集到wxs文件中,因此安装将仅在执行安装时创建正确的注册表项。
首先,为您的设置创建一个详细的日志文件 ,以便您可以找到由msiexec记录的错误消息:
msiexec.exe /i c:\setup.msi /QN /L*V "C:\Temp\msilog.log"
快速说明:
/L*V "C:\Temp\msilog.log"= verbose logging
/QN = run completely silently
/i = run install sequence
按照以下说明打开日志文件并搜索“ value 3 ”: http : //robmensching.com/blog/posts/2010/8/2/the-first-thing-i-do-with-an-msi-log /
来源链接:
编辑:再次查看您的代码,我很确定问题是:
我离开的是我之前写的更长的答案:
除了Phil的回答外, 不建议将Intel SDK设置作为自定义操作进行安装 。 MSI禁止运行两个并发的InstallExecuteSequence会话,这很可能是您所看到的错误的原因。
尝试删除当前用于安装MSI的自定义操作,而先作为两个MSI文件的链式安装的一部分来运行SDK安装程序,以查看是否可以解决问题。
出于多种原因,不应使用自我注册来注册COM文件:
除此之外,如果您坚持使用自我注册,则在编译MSI文件时不应使用任何硬编码的路径 。 忽略了您应该使用正确的COM提取将Phil文件注册为Phil指出的事实,应删除regsvr32.exe的路径,以便使用AppSearch / FileSearch条目,该条目将在您要安装到的系统上找到regsvr32.exe。 DLL应该安装到%ProgramFiles%\\ Your Company Name \\ Your Project Name \\或类似目录下的本地路径,然后注册以从那里运行。 生成的WIX代码将类似于:
ExeCommand='[PATHTOREGSVR32]regsvr32.exe /s "[INSTALLDIR]FP7000-Camera.dll"'>
也许也阅读这些文章:
在代码示例中添加一个简短的答案,现在暂时保留我的其他答案:
您需要将FP7000-Camera.dll文件安装到Program Files下的目录中,然后在该目录中注册。 以下是在CodeProject上找到的示例的快速模型: http : //www.codeproject.com/Tips/105638/A-quick-introduction-Create-an-MSI-installer-with
<?xml version="1.0"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" UpgradeCode="put-guid-here" Name="Example Product Name" Version="0.0.1" Manufacturer="Example Company Name" Language="1033"> <Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package"/> <Media Id="1" Cabinet="product.cab" EmbedCab="yes"/> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLDIR" Name="Example"> <Component Id="FP7000-Camera.dll" Guid="*"> <File Id="FP7000-Camera.dll" Source="replace with path to FP7000-Camera.dll"/> </Component> </Directory> </Directory> </Directory> <Feature Id="DefaultFeature" Level="1"> <ComponentRef Id="FP7000-Camera.dll"/> </Feature> </Product> </Wix>
您还应该删除 dll 的自注册 ,而是将COM注册添加到将文件安装到磁盘的组件中。 在此处查看示例: 如何在WiX 3中注册Win32 COM DLL文件? (运行Wix工具heat.exe生成要包含在组件中的COM数据)。 如果正确执行此操作,则无需自行注册文件,您可以删除自定义操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.