我对我的C#项目使用wix。我有一个安装程序的引导程序。该引导程序安装:使用wix安装软件包
- SQL服务器2014
- CLR类型2014
- 系统管理对象2014 (三个来自微软的站点)
- 我的应用程序
我的问题是系统2014年的管理对象取决于CLR类型2014.当我的安装程序正在执行时,安装了SQL服务器,然后CLR类型为2014,安装时必须安装System Management Object 2014 I有一个错误消息“需要CLR类型”。如果我取消设置并重新启动,它工作正常。
如何编写我的Bundle.wxs来检测以前的安装(或重新启动安装程序)?
有我的代码:
<!-- SQL CLR Types -->
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server 2014 Redist\SQL Server System CLR Types\CurrentVersion"
Value="Version"
Variable="CLRTypesx86"/>
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server 2014 Redist\SQL Server System CLR Types\CurrentVersion"
Value="Version"
Variable="CLRTypesx64"
Win64="yes"/>
<!-- System Managment Objects -->
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\SharedManagementObjects\CurrentVersion"
Value="Version"
Variable="SMO2014x86"/>
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\SharedManagementObjects\CurrentVersion"
Value="Version"
Variable="SMO2014x64"
Win64="yes"/>
<!-- Install SQL CLR Types -->
<PackageGroup Id="SQLCLRTypes">
<MsiPackage Id="SQLCLRTypesx86"
SourceFile=".\Resources\SQLSysClrTypes2014x86.msi"
ForcePerMachine="yes"
Cache="no"
Compressed="no"
DownloadUrl="https://download.microsoft.com/download/1/3/0/13089488-91FC-4E22-AD68-5BE58BD5C014/ENU/x86/SQLSysClrTypes.msi"
Permanent="no"
Vital="yes"
InstallCondition="NOT VersionNT64 AND NOT CLRTypesx86" />
<MsiPackage Id="SQLCLRTypesx64"
SourceFile=".\Resources\SQLSysClrTypes2014x64.msi"
ForcePerMachine="yes"
Cache="no"
Compressed="no"
DownloadUrl="https://download.microsoft.com/download/1/3/0/13089488-91FC-4E22-AD68-5BE58BD5C014/ENU/x64/SQLSysClrTypes.msi"
Permanent="no"
Vital="yes"
InstallCondition="VersionNT64 AND NOT CLRTypesx64" />
</PackageGroup>
<!-- Install System Managment Objects -->
<PackageGroup Id="SMO2014">
<MsiPackage Id="SharedManagementObjects2014x86"
SourceFile=".\Resources\SharedManagementObjects_x86.msi"
ForcePerMachine="yes"
Cache="no"
Compressed="no"
DownloadUrl="https://download.microsoft.com/download/1/3/0/13089488-91FC-4E22-AD68-5BE58BD5C014/ENU/x86/SharedManagementObjects.msi"
Permanent="yes"
Vital="yes"
InstallCondition="NOT VersionNT64 AND NOT SMO2014x86" />
<MsiPackage Id="SharedManagementObjects2014x64"
SourceFile=".\Resources\SharedManagementObjects_x64.msi"
ForcePerMachine="yes"
Cache="no"
Compressed="no"
DownloadUrl="https://download.microsoft.com/download/1/3/0/13089488-91FC-4E22-AD68-5BE58BD5C014/ENU/x64/SharedManagementObjects.msi"
Permanent="yes"
Vital="yes"
InstallCondition="VersionNT64 AND NOT SMO2014x64" />
</PackageGroup>
SQLCLRTypes安装是否在执行后请求重新引导?引导程序日志应该提及是否是。日志行如下所示:'应用执行包:SQLCLRTypesx64,结果:0x0 [或其他值],重新启动:必需' –
SQLCLRTypes不需要重新启动,但SMO2014需要它。看起来安装程序在安装过程中并未刷新已安装的软件包。第一次运行:安装了1- SQLCLRTypes 2- SMO2014有错误“缺少SQLCLRTypes”。如果我退出安装程序并重新启动:1- SQLCLRTypes存在,因此未安装SMO2014安装 –
我高度怀疑SQLCRLTypes请求重新启动,因为SMO2014无法安装,但可以在重新启动后进行。仅仅因为在安装SQLCLRTYpes之后引导程序不重新启动并不意味着它不需要重新启动。引导程序的默认行为是阻止重新启动,直到安装完所有程序包。您需要查看日志并验证SQLCLRTypes不需要重新启动。如果确实如此,那么我们可以强制引导程序重新启动,然后继续。 –