首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果实例存在,如何阻止WIX安装程序创建数据库

如果实例存在,如何阻止WIX安装程序创建数据库
EN

Stack Overflow用户
提问于 2016-03-10 07:12:07
回答 1查看 1.2K关注 0票数 1

我有一个WIX安装程序,它的服务器安装由自定义代码和SQL Server组成。该项目由自定义代码安装程序和包含SQL Server自定义代码的捆绑包组成。

在包中,它检查实例名称是否存在,如果存在,则不安装SQL Server。

代码语言:javascript
复制
<!-- Microsoft SQL Server 2012 Express -->
<Fragment>
    <?define SQLServer2012Link = http://download.microsoft.com/download/0/1/E/01E0D693-2B4F-4442-9713-27A796B327BD/SQLEXPR_x86_ENU.exe ?>
    <?define InstanceName = "testinstance" ?>

    <util:RegistrySearch Id="SqlInstanceFound"    Variable="SqlInstanceFound64" Result="exists" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\$(var.InstanceName)" Win64="yes" />
    <util:RegistrySearch Id="SqlInstanceKeyFound" Variable="SqlInstanceFound32" Result="exists" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" Value="$(var.InstanceName)" Win64="no" />


    <PackageGroup Id="PackageGroup_SQLServer2012">

        <!-- Microsoft SQL Server 2012 Express for new instalation-->
        <ExePackage
                  Id="Package_SQLServer2012" DisplayName="Microsoft SQL Server 2012  Express SP2"
                  InstallCondition="NOT Installed AND InstallServer = 1" DetectCondition="SqlInstanceFound64 OR SqlInstanceFound32"
                  Name="Prerequisites\SQLEXPR_x86_ENU.exe"
                  DownloadUrl="$(var.SQLServer2012Link)"
                  Permanent="yes" PerMachine="yes" Vital="yes" Compressed="no"
                  InstallCommand="/QS /HIDECONSOLE /ACTION=Install /FEATURES=SQL /INSTANCENAME=$(var.InstanceName) /SQLCOLLATION=&quot;SQL_Latin1_General_CP1_CI_AS&quot; /SECURITYMODE=SQL /SAPWD=&quot;password&quot; /TCPENABLED=1 /NPENABLED=1 /SQLSYSADMINACCOUNTS=BUILTIN\Administrators /ADDCURRENTUSERASSQLADMIN=TRUE /SKIPRULES=RebootRequiredCheck /IAcceptSQLServerLicenseTerms">

            <RemotePayload
                        CertificatePublicKey="B78FE7F6917E1BC5F4A9C77BA3D555A0E807B9E0"
                        CertificateThumbprint="67B1757863E3EFF760EA9EBB02849AF07D3A8080"
                        Hash="94EAAFA2A4C976B107ED23502B9DE9FA0F87D2E5"
                        Description="Microsoft SQL Server 2012  Express SP2"
                        ProductName="Microsoft SQL Server 2012  Express SP2" Size="274628920" Version="11.0.5058.0" />
            <ExitCode Value ="3010" Behavior="success" />
        </ExePackage>
    </PackageGroup>
</Fragment>

在自定义代码安装中,它运行一些sql脚本来创建和填充数据库。

代码语言:javascript
复制
<Component Id='SqlComponent' Guid='A60B1852-7C4B-402B-A619-EECA2893C5AC' KeyPath='yes'>
    <sql:SqlDatabase Id='SqlDatabase' Database='db' Server='(local)' Instance='testinstance' User='SQLUser' CreateOnInstall='yes' DropOnUninstall='no' ContinueOnError='no'/>
    <sql:SqlScript Id="CreateUsers" ExecuteOnInstall="yes" BinaryKey="CreateUsersSql" SqlDb="SqlDatabase" User="SQLUser"/>
    <sql:SqlScript Id="CreateBaseLineDb" ExecuteOnInstall="yes" BinaryKey="CreateBaseLineDbSql" SqlDb="SqlDatabase" User="SQLUser"/>
    <sql:SqlScript Id="UpgradeDb" ExecuteOnInstall="yes" BinaryKey="UpgradeDbSql" SqlDb="SqlDatabase" User="SQLUser"/>
    <!-- sql:SqlScript Id="UpdateCustomPlayList" ExecuteOnInstall="yes" BinaryKey="UpdateCustomPlayListSql" SqlDb="SqlDatabase" User="SQLUser"/ -->
    <sql:SqlScript Id="RemoveOldContent" ExecuteOnInstall="yes" BinaryKey="RemoveOldGuruContentSql" SqlDb="SqlDatabase" User="SQLUser"/>
    <sql:SqlScript Id="AddCompleteMedia" ExecuteOnInstall="yes" BinaryKey="AddCompleteMediaSql" SqlDb="SqlDatabase" User="SQLUser"/>
    <sql:SqlScript Id="InstallContent" ExecuteOnInstall="yes" BinaryKey="InstallGuruContentSql" SqlDb="SqlDatabase" User="SQLUser"/>
    <sql:SqlScript Id="InstallFeaturedContent" ExecuteOnInstall="yes" BinaryKey="InstallFeaturedContentSql" SqlDb="SqlDatabase" User="SQLUser"/>
  </Component>

问题是,即使实例存在,自定义代码安装仍然会尝试创建数据库,而数据库已经存在。

当实例已经存在时,如何阻止sql脚本运行?

谢谢,加里

更新:我添加/修改了以下代码...

到捆绑包..。

代码语言:javascript
复制
<Variable Name="SQLInstalled" Type="numeric" bal:Overridable="yes" Value="0" Persisted="yes"/>

<MsiPackage Id="GuruServer" Cache="no" Compressed="$(var.Compressed)" InstallCondition="InstallServer = 1"
                    Description="Guru Server" DownloadUrl="$(var.GuruDownloadRepo)/{2}"
                    SourceFile="$(var.GuruServerInstall.TargetPath)"
                    Name="GuruTeach\$(var.GuruServerInstall.TargetFileName)">
            <MsiProperty Name="CHGFIREWALL" Value="[AddFirewallExceptions]"/>
            <MsiProperty Name="SQLINSTALLED" Value="[SQLInstalled]"/>
        </MsiPackage>

在产品中,我向组件添加了以下条件...

代码语言:javascript
复制
<Condition><![CDATA[SQLINSTALLED = 1]]></Condition>

我还不知道的是在安装SQL Server时如何修改这个变量。

EN

回答 1

Stack Overflow用户

发布于 2016-03-14 17:11:09

如果您不想执行自定义操作或将结果设置为Wix值,则创建一个自定义操作来检查实例.You是否可以return;

代码语言:javascript
复制
session["SQLINSTANCE"] = yourResult;

在你的wxs中

代码语言:javascript
复制
  <Custom Action="DoSometh" After='InstallFinalize'>NOT Install AND  (<![CDATA[SQLINSTANCE<>"true"]]>)</Custom>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35904539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档