2015-10-05 110 views
2

我正在嘗試查找SQL服務器的安裝目錄。以便我可以將用於自定義SSIS任務的dll複製到其中。檢測SQL服務器安裝目錄

下面的代碼運行但它不復制我的文件。它不停止,所以我假設它已經發現了一些價值ISSQLSERVERSERVICEINSTALLED

我是wix的新手這是我第一次試圖從寄存器中讀取。

<?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> 

更新1:

  • 添加"InstallPrivileges="elevated""似乎並沒有幫助
  • 添加REG的圖片。

enter image description here

更新2:

我得到了一些地方。它現在安裝在我的Ddrive ....

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\'. 

這使我相信,它沒有找到ISSQLSERVERSERVICEINSTALLED

更新3:

它現在安裝在C盤上。但是它創建了一個名爲SQLSERVERINSTALLFOLDER的目錄,它沒有考慮價值。日誌文件說,SQLSERVERINSTALLFOLDER的值是c:我無法弄清楚它是否能夠找到註冊表值。我嘗試添加一個條件,以迫使它失敗,但它不是沒有

<Condition Message='Install Folder not found'>SQLSERVERINSTALLFOLDER</Condition> 
+0

可能缺少管理員權限? – Max

+0

我也這麼想過。但是,當我點擊安裝文件時,我可以選擇以管理員身份運行。 Windows會彈出並詢問權限。 – DaImTo

+0

Witch值在HKLM \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ 100 \ VerSpecificRootDir註冊表項上? – Max

回答

1

我終於得到它的工作,問題是該片段wasint被稱爲我不得不添加<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>