У меня очень небольшое тестовое приложение, в котором я пытаюсь установить службу Windows и создать базу данных LocalDB во время процесса установки, а затем подключиться к этой базе данных LocalDB при запуске службы Windows.
У меня возникают огромные проблемы с подключением к экземпляру LocalDB из моей службы Windows.
Мой процесс установки выглядит примерно так:
-
Выполните файл .msi установщика, который запускает процесс msiexec в качестве учетной записи NT AUTHORITY\SYSTEM.
-
Запустите специальное действие для выполнения SqlLocalDB.exe со следующими командами:
- sqllocaldb.exe create MYINSTANCE
- sqllocaldb.exe доля MYINSTANCE MYINSTANCESHARE
- sqllocaldb.exe start MYINSTANCE
-
Запустите пользовательское действие С# с помощью ADO.NET(System.Data.SqlConnection), чтобы выполнить следующие действия:
- Подключитесь к следующей строке подключения,
Data Source=(localdb)\MYINSTANCE; Integrated Security=true
- CREATE DATABASE TestDB
- ИСПОЛЬЗОВАНИЕ TestDB
- CREATE TABLE...
- Подключитесь к следующей строке подключения,
-
Запустите службу Windows до завершения установки.
-
Служба Windows установлена на учетную запись LocalSystem, а также работает как пользовательская учетная запись NT AUTHORITY\SYSTEM.
-
Служба пытается подключиться с использованием той же строки соединения, которая была использована выше.
Я постоянно получаю следующую ошибку при попытке открыть соединение с указанной выше строкой подключения из службы Windows:
System.Data.SqlClient.SqlException(0x80131904): связанный с сетью или произошла ошибка конкретного экземпляра при установлении соединения с SQL Server. Сервер не найден или не был доступен. проверить что имя экземпляра верное и что SQL Server настроен на разрешить удаленные подключения. (поставщик: сетевые интерфейсы SQL, ошибка: 50 - Произошла ошибка локальной базы данных. Указанный экземпляр LocalDB не существует.
Это разочаровывает то, что как пользовательское действие установщика msi, так и служба Windows работают под одной учетной записью пользователя Windows (я проверил, они оба NT AUTHORITY\System). Итак, почему первые работы, а вторая - не вне меня.
Я попытался изменить строки подключения, используемые в пользовательском действии, и службу Windows для использования имени общего ресурса (localdb)\.\MYINSTANCESHARE
, и я получаю ту же самую ошибку из службы Windows.
Я попытался изменить учетную запись пользователя, которую служба Windows входит в учетную запись пользователя Windows, которая работает до тех пор, пока я впервые запустил команду, чтобы добавить ее в логины SQL Server для этого экземпляра.
Я также попытался запустить консольное приложение и подключиться к строке подключения имени общего ресурса, и это также работает.
Я также попытался подключиться к имени общего ресурса из SQL Server Management Studio, и это тоже работает.
Однако ни один из этих методов не решит мою проблему. Мне нужна служба Windows, потому что она запускается, как только компьютер запускается (даже если пользователь не входит в систему) и запускается независимо от того, какая учетная запись пользователя зарегистрирована.
Как служба Windows подключается к локальному экземпляру LocalDB?
Я использую SQL Server 2014 Express LocalDB.