2016-12-12 133 views
0

我对我的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> 
+0

SQLCLRTypes安装是否在执行后请求重新引导?引导程序日志应该提及是否是。日志行如下所示:'应用执行包:SQLCLRTypesx64,结果:0x0 [或其他值],重新启动:必需' –

+0

SQLCLRTypes不需要重新启动,但SMO2014需要它。看起来安装程序在安装过程中并未刷新已安装的软件包。第一次运行:安装了1- SQLCLRTypes 2- SMO2014有错误“缺少SQLCLRTypes”。如果我退出安装程序并重新启动:1- SQLCLRTypes存在,因此未安装SMO2014安装 –

+0

我高度怀疑SQLCRLTypes请求重新启动,因为SMO2014无法安装,但可以在重新启动后进行。仅仅因为在安装SQLCLRTYpes之后引导程序不重新启动并不意味着它不需要重新启动。引导程序的默认行为是阻止重新启动,直到安装完所有程序包。您需要查看日志并验证SQLCLRTypes不需要重新启动。如果确实如此,那么我们可以强制引导程序重新启动,然后继续。 –

回答

1

如果您SQLCLRTypes安装时需要重新启动时它会通知的引导器应用,一个是需要的,但引导程序引擎将决定指出,需要重新启动,然后继续与安装其他包直到安装结束,然后最后一页将显示重新启动页面,而不是结束页面,并将有一个重新启动按钮。

引导程序还支持在安装过程中重新启动,然后在计算机重新启动后继续安装(如有必要)。我们可以使用这个函数,因为下游软件包依赖于SQLCLRTypes,并且直到由于最有可能使用的文件而重启时才会完全存在。

由于您使用的是C#,我假设您使用托管引导程序。

您需要向每个包完成后引发的OnExecutePackageComplete事件添加一个处理程序。

它可能会是这个样子

private void ExecutePackageComplete(object sender, ExecutePackageCompleteEventArgs args) 
{ 
    if (e.Restart == ApplyRestart.RestartRequired && (e.PackageId == "SQLCLRTypesx86" || e.PackageId == "SQLCLRTypesx64")) 
    { 
     e.Result = Result.Restart 
    } 
} 

这将导致你的引导程序安装SQLCLRTypes,而不是继续尝试安装SMO后显示重启页面。一旦机器重新启动,安装程序将自动重新启动并恢复停止。您可能希望用一些额外的文本指出,当SQLCLRTypes需要重新启动时,安装将在引导程序的重新启动页面上重新启动后恢复。