检测SQL Server安装目录

时间:2015-10-05 09:39:10

标签: sql-server wix

我正在尝试查找SQL Server的安装目录。这样我就可以将自定义SSIS任务的dll复制到其中。

以下代码运行但不复制我的文件。它也没有停止,所以我假设它已经为python

找到了一些价值

我是wix的新手,这是我第一次尝试从寄存器中读取。

ISSQLSERVERSERVICEINSTALLED

更新1:

  • 添加<?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" Name="Daimto OpenWeather for SSIS" Language="1033" Version="1.0.0.0" Manufacturer="DAIMTO" UpgradeCode="84543418-55c4-48c0-b5be-2496fb84ffb6"> <Package InstallerVersion="200" Compressed="yes" InstallScope="perUser" InstallPrivileges="elevated" AdminImage="yes" /> <MediaTemplate EmbedCab="yes" CompressionLevel="high" /> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> <Feature Id="SSISMSSQL" Title="SSIS Components" Display='expand' Level='1'> <ComponentRef Id='SSISPipelineComponents' /> <ComponentRef Id='SSISConnections' /> </Feature> <UIRef Id="WixUI_Minimal"/> </Product> <!-- Get the directory name--> <Fragment> <Property Id="SQLSERVERINSTALLFOLDER"> <RegistrySearch Id='InstallDir' Type='raw' Root='HKLM' Key="SOFTWARE\Microsoft\Microsoft SQL Server\100" Name="VerSpecificRootDir" /> </Property> <Condition Message='Install Folder not found'>SQLSERVERINSTALLFOLDER</Condition> </Fragment> <!-- Build directory structure. http://blogs.msdn.com/b/syamp/archive/2012/09/30/wix-search-for-install-path-from-registry.aspx --> <Fragment> <Directory Id = "TARGETDIR" Name="SourceDir"> <Directory Id="SQLSERVERINSTALLFOLDER" > <Directory Id="DTSDir" Name="DTS"> <Directory Id="PIPELINECOMPONENTS" Name="PipelineComponents" /> <Directory Id="CONECTIONS" Name="Connections" /> </Directory> </Directory> </Directory> <!-- Set tarit dir to c: --> <SetDirectory Id="TARGETDIR" Value="[WindowsVolume]" /> </Fragment> <!-- copie files. --> <Fragment> <ComponentGroup Id="SSISPipelineComponentsgrp" Directory="PIPELINECOMPONENTS"> <Component Id="SSISPipelineComponents" Guid="{51CE96C7-42BF-4CE7-AE88-5C0085868062}" > <File Id="Daimto.SSIS.Tasks.Current" Name="Daimto.SSIS.Tasks.Current.dll" DiskId="1" KeyPath="yes" Source="$(var.Daimto.SSIS.Tasks.Current.TargetPath)" /> </Component> </ComponentGroup> <ComponentGroup Id="SSISConnectionsgrp" Directory="CONECTIONS"> <Component Id="SSISConnections" Guid="{8DFFB861-18E4-4E08-8D4E-CAD99911E8A8}" > <File Id="Daimto.SSIS.Connection" Name="Daimto.SSIS.Connection.dll" DiskId="1" KeyPath="yes" Source="$(var.Daimto.SSIS.Connection.TargetPath)" /> </Component> </ComponentGroup> </Fragment> </Wix> 似乎无法提供帮助
  • 添加reg。
  • 的图片

enter image description here

更新2:

我得到了一些地方。它现在安装在我的Ddrive上....

"InstallPrivileges="elevated""

这使我相信它没有找到MSI (c) (CC:98) [13:37:09:112]: PROPERTY CHANGE: Adding TARGETDIR property. Its value is 'D:\'. MSI (c) (CC:98) [13:37:09:112]: PROPERTY CHANGE: Adding ISSQLSERVERSERVICEINSTALLED property. Its value is 'D:\'. MSI (c) (CC:98) [13:37:09:112]: PROPERTY CHANGE: Adding DTS property. Its value is 'D:\DTS\'. MSI (c) (CC:98) [13:37:09:113]: PROPERTY CHANGE: Adding CONECTIONS property. Its value is 'D:\DTS\Connections\'. MSI (c) (CC:98) [13:37:09:113]: PROPERTY CHANGE: Adding PIPELINECOMPONENTS property. Its value is 'D:\DTS\PipelineComponents\'.

更新3:

它现在安装在c盘上。但是它创建了一个名为SQLSERVERINSTALLFOLDER的目录,它没有取值。日志文件说SQLSERVERINSTALLFOLDER的值是c:我无法弄清楚它是否能够找到注册表值。我尝试添加一个条件来强制它失败,但它没有失败

ISSQLSERVERSERVICEINSTALLED

1 个答案:

答案 0 :(得分:2)

我终于让它工作了,问题是片段被调用了我必须将<ComponentGroup Id="Fake" />添加到片段然后用其他componentRefs声明它。

以下代码检测到sqlserver 2008将连接管理器和数据读取器复制到正确的dts文件夹,然后将它们安装在GAC中。

希望这有助于某人。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*" Name="Daimto for SSIS (SQL Server 2008)" Language="1033" Version="1.0.0.0" Manufacturer="DAIMTO" UpgradeCode="84543418-55c4-48c0-b5be-2496fb84ffb6">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perUser"  InstallPrivileges="elevated" AdminImage="yes" />
    <MediaTemplate EmbedCab="yes" CompressionLevel="high" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

    <Feature Id="SSISMSSQL" Title="SSIS Components" Display='expand'  Level='1'>
      <ComponentRef Id='SSISPipelineComponents' />
      <ComponentRef Id='SSISConnections' />
      <ComponentGroupRef Id="CopyGAC"/>
      <ComponentGroupRef Id="Fake"/>
    </Feature>
    <UIRef Id="WixUI_Minimal"/>
  </Product>


  <!-- Get install location of SQL Server 2008 -->
  <Fragment>
    <Property Id="SQLSERVERINSTALLFOLDER">
      <RegistrySearch Id='InstallDir'
                    Type='directory'
                    Root='HKLM'
                     Key="SOFTWARE\Microsoft\Microsoft SQL Server\100" Name="VerSpecificRootDir" />

    </Property>
    <Condition Message='Install Folder not found'>SQLSERVERINSTALLFOLDER</Condition>
    <ComponentGroup Id="Fake" />
  </Fragment>

  <!-- map the directory structures -->
  <Fragment>
    <Directory Id = "TARGETDIR" Name="SourceDir">
      <Directory Id="GAC" Name="GAC" />
      <Directory Id="SQLSERVERINSTALLFOLDER" >
        <Directory Id="DTSDir" Name="DTS">
          <Directory Id="PIPELINECOMPONENTS" Name="PipelineComponents" />
          <Directory Id="CONECTIONS" Name="Connections" />
        </Directory>
      </Directory>
    </Directory>

    <!-- Set TARGETDIR dir to c: -->
    <SetDirectory Id="TARGETDIR" Value="[WindowsVolume]" />
  </Fragment>

  <!-- copie files. -->
  <Fragment>

    <!-- copy data reader files -->
    <ComponentGroup Id="SSISPipelineComponentsgrp" Directory="PIPELINECOMPONENTS">
      <Component Id="SSISPipelineComponents" Guid="{51CE96C7-42BF-4CE7-AE88-5C0085868062}" >
        <File Id="Daimto.SSIS.Tasks.Current" Name="Daimto.SSIS.Tasks.Current.dll" DiskId="1" KeyPath="yes" Source="$(var.Daimto.SSIS.Tasks.Current.TargetPath)" />
        <File Id="Newtonsoft.Json.dll" Name="Newtonsoft.Json.dll" DiskId="1" KeyPath="no" Source="$(var.ProjectDir)Externals\Newtonsoft.Json.dll" />
      </Component>
    </ComponentGroup>

    <!-- copy connection manager file -->
    <ComponentGroup Id="SSISConnectionsgrp" Directory="CONECTIONS">
      <Component Id="SSISConnections" Guid="{8DFFB861-18E4-4E08-8D4E-CAD99911E8A8}" >
        <File Id="Daimto.SSIS.Connection" Name="Daimto.SSIS.Connection.dll" DiskId="1" KeyPath="yes" Source="$(var.Daimto.SSIS.Connection.TargetPath)" />
      </Component>
    </ComponentGroup>

    <!-- copy everything to GAC (remember dlls must be strong name signed.) -->
    <ComponentGroup Id="CopyGAC" Directory="GAC">
      <Component Id="GACCOPYCurrent" Guid="{4D4E991E-77F5-4CCF-9048-B4C0260B43BD}" >
        <File Id="GACDaimto.SSIS.Tasks.Current" Name="Daimto.SSIS.Tasks.Current.dll"  KeyPath="yes" Source="$(var.Daimto.SSIS.Tasks.Current.TargetPath)" Assembly=".net"/>
      </Component>
      <Component Id="GACCOPYJson" Guid="{65E88F62-E73F-4851-9422-6C8D1DA5183F}" >
        <File Id="GACNewtonsoft.Json.dll" Name="Newtonsoft.Json.dll"  KeyPath="yes" Source="$(var.ProjectDir)Externals\Newtonsoft.Json.dll" Assembly=".net"/>
      </Component>
      <Component Id="GACCOPYConnection" Guid="{2DCABCEA-62CD-4F0D-BCAC-395A079AF27A}" >
        <File Id="GACDaimto.SSIS.Connection" Name="Daimto.SSIS.Connection.dll" KeyPath="yes" Source="$(var.Daimto.SSIS.Connection.TargetPath)" Assembly=".net"/>
      </Component>
    </ComponentGroup>
  </Fragment>
</Wix>