Wix SqlDatabase создание 2014 Ошибка LocalDb

У меня есть проект Wix Toolset, которому необходимо установить базу данных в существующую установку SqlServer 2014 LocalDb, и мне это не удалось. Я много искал на SO, а также на других сайтах примеры или предложения, которые могут быть применимы. До сих пор я не нашел ничего, что работает в моем проекте.

Локальная база данных SqlServer уже установлена ​​в системе, и к ней можно получить доступ из SQL Mgmt Studio. Все системные базы данных отображаются, как и ожидалось, и я могу создать новую базу данных в Mgmt Studio.

Текстовый файл, который я включаю в качестве теста, правильно устанавливается в ожидаемую папку.

Ошибка, которую я получаю, зависит от того, какие параметры я определяю в элементе SqlDatabase.

Из журнала установщика:
Действие 11:46:34: CreateFolders. Создание папок
CreateFolders: Папка: C:\Check\Database\
CreateFolders: Папка: C:\Check\Database\
Действие 11:46:34: InstallFiles. Копирование новых файлов
Файлы установки: Файл: TestFile.txt, Каталог: C:\Check\Database\, Размер: 19
Действие 11:46:34: CreateDatabase. Создание баз данных
CreateDatabase: ошибка 0x80004005: не удалось создать базу данных SQL, но продолжающаяся ошибка: неизвестная ошибка, база данных: проверьте
Действие 11:46:51: RegisterProduct. Регистрация продукта

Файл wxs для этой установки:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util='http://schemas.microsoft.com/wix/UtilExtension'
xmlns:sql='http://schemas.microsoft.com/wix/SqlExtension'>
<Product Id="*" Name="Ach Check Database Installation" Language="1033" Version="1.0.0.0" Manufacturer="ACH Solutions" UpgradeCode="3828eaf7-528f-4006-9169-27bed44e79fe">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate EmbedCab="yes"/>
    <Feature Id="CheckDb" Title="Check Database" Description="The Check Database" ConfigurableDirectory="INSTALLDIR" Level="1">
        <ComponentGroupRef Id="DatabaseComponents" />
    </Feature>
    <UIRef Id="WixUI_Mondo" />
</Product>  
<Fragment>
  <Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="INSTALLDIR" Name="CheckDir" >
      <Directory Id="DatabaseFolder" Name="Database" />
    </Directory>
  </Directory>
</Fragment>
<Fragment>    
    <ComponentGroup Id="DatabaseComponents" Directory="DatabaseFolder">
        <Component Id='SqlComponent' Guid='53234257-65F1-4D58-B2CA-90308EC102FF'>
            <CreateFolder />
            <File Id="file_TestFile.txt" Source="E:\TestFile.txt"/>
        </Component>
        <Component Id="sql_SqlDatabase" Guid="B4D9CB63-B740-4860-89B6-1209D9A1A18E">
             <CreateFolder/>
             <sql:SqlDatabase Id='SqlDatabase'
                    Database='Check'
                    CreateOnInstall='yes'
                    Server='localhost\(localdb)\MsSqlLocalDb'
                    DropOnUninstall='no'
                    ContinueOnError='yes'>
                <sql:SqlFileSpec Id='sql_CheckDatabase' Filename='CheckDatabase.mdb' Name='CheckDatabase' Size='30MB' />
               <sql:SqlLogFileSpec Id='sql_CheckDatabase_Log' Filename='CheckDatabase_Log.ldb' Name='CheckDatabaseLog' Size='3MB' />
            </sql:SqlDatabase>
        </Component>      
    </ComponentGroup>
</Fragment>  
</Wix>

Кто-нибудь сталкивался с этой проблемой или чем-то подобным раньше? Каково было решение?

Я приветствую любые предложения, которые могут помочь в этом.

Спасибо,
Евгений


person Eugene    schedule 23.10.2015    source источник


Ответы (2)


Я считаю, что атрибут Server должен быть просто '(localdb)\MsSqlLocalDb'.

Также убедитесь, что экземпляр LocalDB существует к моменту запуска программы установки и что он доступен пользователю, под которым запущена программа установки. В целях тестирования вы также можете попробовать использовать именованный канал вместо имени сервера. Чтобы получить имя канала экземпляра, выполните следующую команду в командной строке:

sqllocaldb info MsSqlLocalDb
person rocky    schedule 24.10.2015
comment
Спасибо за предложение. Я должен был объяснить, что уже испробовал все варианты комбинации сервер/экземпляр, какие только мог придумать. Включая Server='(localdb)\MsSqlLocalDb, Server = 'localhost' Instance=(localdb)\MsSqlLocalDb и т. д. Я думаю, что могу установить физические файлы базы данных, а затем создать таблицы из сценария. Похоже, это может быть способ пойти с локальной базой данных. Еще раз спасибо за ответ. - person Eugene; 24.10.2015

WiX не поддерживает подключения к локальной базе данных.

https://github.com/wixtoolset/issues/issues/4957

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/b5c9a1fa-75fc-41f2-a5d3-4b2b6ed4ebde/localdb-problem-unable-to-connection-через-localdbv110-но-can-via-named-paipes

Кто-то должен был бы обновить dutil, чтобы использовать последний собственный клиент SQL Server, и, похоже, за 7 лет никто этого не сделал.

Альтернативой является написание собственных настраиваемых действий для обработки SQL. У меня есть кое-что, что я могу предоставить, если вы пришлете мне запрос по электронной почте.

person Christopher Painter    schedule 24.02.2019