2015-10-05 4 views
2

Я пытаюсь найти каталог установки для SQL-сервера. Так что я могу скопировать DLL для пользовательской задачи SSIS.Обнаружение каталога установки 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> 

Update 1:

  • добавил "InstallPrivileges="elevated"" не появляется, чтобы помочь
  • добавить изображение рег.

enter image description here

Update 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:

Его сейчас установка на диск С. но он создает каталог под названием 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>