Установщик Wix ExecuteSqlStrings Заказ пользовательских действий - PullRequest
0 голосов
/ 30 сентября 2019

Как часть созданного пакета MSI, который я создаю через WIX, я копирую резервную копию базы данных и пытаюсь восстановить ее с помощью расширения сценария sql. К тому времени, когда происходит действие ExecuteSqlStrings, файл резервной копии еще не скопирован, поскольку. Я поместил оба InstallSqlData и ExecuteSqlStrings, чтобы происходить прямо перед InstallFinalize. Есть ли способ гарантировать, что выполнение сценариев sql происходит после того, как файлы были скопированы? Чего мне не хватает, installlexecutesequence должна выполняться в порядке, верно? Эти действия происходят синхронно, верно?

Прежде чем кто-либо задает вопрос, пожалуйста, знайте, что когда я помещаю файл в местоположение, используемое запросом, пакет msi не выдает ошибку. Я также удостоверился, что файл копирует в правильное местоположение, удаляя сценарий sql вообще. Вот некоторый код:

  <Fragment>
    <Binary Id="createDB_FromBackup" SourceFile="DBScript\1_Create_From_Backup.sql" />
    <ComponentGroup Id="DatabaseComponents" Directory="INSTALLFOLDER" >
      <Component Id="cmpSqlDatabase" Guid="{F950605D-AA59-43E6-AB19-9452F6BEC649}" KeyPath="yes" Win64="$(var.Win64)" >
        <sql:SqlDatabase 
          Id="sqlDatabase_MyDatabase"
                        Server="[ComputerName]"
                        Instance="$(var.SqlInstanceName)"
                        Database="master"
                        CreateOnInstall="no"
                        DropOnUninstall="no"
                        ContinueOnError="no"
                        ConfirmOverwrite="yes"
                        DropOnReinstall="no" 
                        DropOnInstall="no" 
                        CreateOnReinstall="no" 
                        CreateOnUninstall="no">
          <sql:SqlString Id="create_dbBackupTable"
                        ExecuteOnInstall="yes"
                        ExecuteOnReinstall="no"
                        ExecuteOnUninstall="no"
                        ContinueOnError="no"
                        Sequence="1"
                        SQL="
                        if OBJECT_ID('master.dbo._pj15DBBackupInfo') is not null 
                        begin
                            drop table master.dbo._pj15DBBackupInfo 
                        end
                        select * into master.dbo._pj15DBBackupInfo from (select BackupLocation = '[INSTALLFOLDER]DB-Backup\') dvt;" />
          <!-- restore PJ15 DB database -->
          <sql:SqlScript Id="sqlScript_CreateDB" BinaryKey="createDB_FromBackup"
                        Sequence="2"
                        ExecuteOnInstall="yes"                         
                        ExecuteOnReinstall="no"
                        ExecuteOnUninstall="no" 
                        ContinueOnError="no" />
        </sql:SqlDatabase>
      </Component>
    </ComponentGroup>
  </Fragment>
<InstallExecuteSequence>
      <Custom After="InstallFinalize"  Action="InstallSqlData" Overridable="no"/>
      <Custom After="InstallSqlData"  Action="ExecuteSqlStrings" Overridable="no"/>
</InstallExecuteSequence>



...