Я пытаюсь решить проблему, которая возникла при создании пакета установки. Пакет установки написан в wix с помощью visual studio 2010. Пакет установки создает базу данных и добавляет некоторые таблицы в эту базу данных. Проблема возникает, когда пользователь выполняет установочный пакет и подключается к удаленному серверу, на котором создается база данных. Два участвующих хоста не находятся в одном домене, поэтому необходимо использовать аутентификацию sql-сервера. В установочном пакете я предоставляю пользователю возможность выбирать между Windows- и SQL-Server-аутентификацией. На данный момент пользователю предлагается диалог, в котором он может выбрать один из двух вариантов. Следствием любой из этих опций является то, что в файле, который хранит строку соединения, значение конфигурации, а именно переключатель Integrated Security
, переключается между true
и false
. Проблема в том, что во время установки учетные данные пользователя используются для входа в удаленный сервер sql. Мне нужно изменить установщик, чтобы использовать учетные данные sql. Я знаю, что я могу добиться этого с помощью следующего SQL элемент:Как условно использовать два разных элемента SqlDatabase?
<sql:SqlDatabase Id="MasterDB" Server="[SQLSERVER_SERVER]" Instance="[SQLSERVER_INSTANCENAME]" Database="master" User="SqlUser" />
Если атрибут пользователя присваивается идентификатор элемента пользователя, обеспечиваемой WixUtilExtension:
<util:User Id="SqlUser" Name="[SQLSERVER_USERNAME]" Password="[SQLSERVER_PASSWORD]" />
То, что я не знаю как создать два разных элемента SqlDatabase, один для Windows - другой для SQL-аутентификации с тем же именем. В идеале я хочу иметь что-то вроде этого:
<sql:SqlDatabase Id="MasterDB" Server="[SQLSERVER_SERVER]" Instance="[SQLSERVER_INSTANCENAME]" Database="master" User="SqlUser"><Condition>SQLSERVER_AUTHENTICATION=1</Condition></sql:SqlDatabase>
<sql:SqlDatabase Id="MasterDB" Server="[SQLSERVER_SERVER]" Instance="[SQLSERVER_INSTANCENAME]" Database="master"><Condition>SQLSERVER_AUTHENTICATION=0</Condition></sql:SqlDatabase>
Элемент SqlDatabase не позволяет Condition элементов, как дети, так что это должно быть сделано иначе. Но я не знаю, как это сделать. Можешь сказать мне?
Спасибо за предложение, но я не» t хочу создать базу данных как таковую. Я вложил элемент SqlDatabase под фрагментом, поэтому он служит локатором, который я использую во всех элементах SqlString. Элементы SqlString заботятся о создании базы данных. Все они ссылаются на два идентификатора SqlDatabase, поэтому я спросил, есть ли возможность иметь два элемента SqlDatabase с одним и тем же идентификатором. Возможно, мне придется переписать мой установщик, чтобы не использовать элементы SqlString. – BdN3504
Теперь я прибегал к решению, которое я пытался избежать: У меня есть две записи DatabaseLocator для каждой используемой базы данных. Например: ' '. Как вы можете видеть, один использует SqlAuthentication, а другой - атрибут User. Каждый компонент, содержащий элемент SqlString, теперь проверяет условие SQLSERVER_AUTHENTICATION и дублируется. –
BdN3504
Пример для дублированного SqlString Компоненты (Часть 1): '<Компонент Id = "DB_CMP" Guid = "PUT-GUID-ЗДЕСЬ" ключевого пути = "да"> <[CDATA [SQLSERVER_AUTHENTICATION = 0]]> ' –
BdN3504