我有一个 WiX 安装程序,所有安装程序都可以运行SqlPackage.exe
以将一些已安装.dacpac
的打包 SQL 应用程序部署到数据库。实际上如下部署数据库文件会成功:
<Property Id="CONNSTRING" Value="Data Source=localhost;Integrated Security=True;Initial Catalog=MPQS-DACPAC" />
<Property Id="SQLPACKAGEPATH" Value="C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" />
<CustomAction Id="DeployDatabase" Property="SQLPACKAGEPATH"
ExeCommand='/Action:Publish /tcs:"[CONNSTRING]" /sf:"[#My.Database.dacpac]" /p:BackupDatabaseBeforeChanges=True /p:RegisterDataTierApplication=True'
Return="check" Execute="deferred" Impersonate="yes" />
<InstallExecuteSequence>
<Custom Action="DeployDatabase" After="DuplicateFiles">NOT REMOVE</Custom>
</InstallExecuteSequence>
...我可以在安装过程中看到显示的控制台窗口中的输出。
但是,它并不总是成功。例如,CONNSTRING
可以在对话框中指定,但可能不正确。如果有错误,它们会立即出现,然后控制台关闭,我在日志中收到 1722 错误。
为了捕获控制台输出,我尝试过:
<CustomAction Id="DeployDatabase" Property="SQLPACKAGEPATH"
ExeCommand='/Action:Publish /tcs:"[CONNSTRING]" /sf:"[#My.Database.dacpac]" /p:BackupDatabaseBeforeChanges=True /p:RegisterDataTierApplication=True > "[DBLogs]test.log"'
Return="check" Execute="deferred" Impersonate="yes" />
最后> "[DBLogs]test.log"
应该(理论上)将输出重定向到该位置的文件,但相反,安装程序在显示控制台窗口时失败。似乎在显示的那一刻,控制台中没有显示任何文本。
踢球者是:我可以复制记录错误的命令(>
正确解析为>
),将其粘贴到我自己的cmd
窗口中,它将执行并记录。
我究竟做错了什么?
更重要的是:我能做些什么来执行这个命令并将stdout
+保存stderr
到日志文件中?
注意:我也尝试过使用 type 34 语法(这种方式解析为 type 50)。两者都表现出相同的行为。