Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Binary 使用WiX中的SQLCMD执行二进制SQL文件_Binary_Wix_Sqlcmd - Fatal编程技术网

Binary 使用WiX中的SQLCMD执行二进制SQL文件

Binary 使用WiX中的SQLCMD执行二进制SQL文件,binary,wix,sqlcmd,Binary,Wix,Sqlcmd,我正在尝试使用SQLCMD安装SQL脚本(SSDT)——因为该脚本包含许多SSDT定义,不能由WIX SQL扩展运行。 我希望我的SQL脚本文件是二进制的(因为我不希望它留在目标机器上) 如何设置SQLCMD命令以使用二进制脚本(使用-i) p、 美国 我尝试了这个博客: 但是这段代码没有显示二进制SQL文件和SCLCMD命令之间的链接。 有人能帮我找到正确的密码吗 这是我使用的代码,对我来说不起作用 <Binary Id="CreateSchema.sql" SourceFile="

我正在尝试使用SQLCMD安装SQL脚本(SSDT)——因为该脚本包含许多SSDT定义,不能由WIX SQL扩展运行。 我希望我的SQL脚本文件是二进制的(因为我不希望它留在目标机器上)

如何设置SQLCMD命令以使用二进制脚本(使用-i)

p、 美国

我尝试了这个博客:

但是这段代码没有显示二进制SQL文件和SCLCMD命令之间的链接。 有人能帮我找到正确的密码吗

这是我使用的代码,对我来说不起作用

<Binary Id="CreateSchema.sql"  SourceFile="..\SQL\CreateSchema.sql" />

<CustomAction Id="sqlcmd.cmd"
          Property="sqlcmd"
          Value="&quot;sqlcmd.exe&quot; -S [DATABASE_SERVER]
        -i &quot;[#CreateSchema.sql]&quot; -v var=SYSTEM_USER -o [INSTALLDIR]installSql.log" />


<CustomAction Id="sqlcmd"
          BinaryKey="WixCA"
          DllEntry="CAQuietExec"
          Return="check"
          Execute="deferred"
          Impersonate="yes" />

<InstallExecuteSequence> 
  <Custom Action="sqlcmd.cmd" After="InstallFiles">NOT Installed</Custom>
  <Custom Action="sqlcmd" After="sqlcmd.cmd">NOT Installed</Custom>
</InstallExecuteSequence>

未安装
未安装
日志文件显示-i参数没有任何文件名值:

MSI(s)(4C:6C)[09:58:15:610]:执行op:CustomActionSchedule(Action=sqlcmd,ActionType=1025,Source=BinaryData,Target=CAQuietExec,CustomActionData=“sqlcmd.exe”-s(local)-i”“-v var=SYSTEM\u USER-o C:\installSql.log)

不是这样工作的。
[#FileID]
语法用于动态使用组件文件的运行时安装完整路径

二进制文件通常用作自定义操作的临时提取文件,或者在本例中用作sql文件等

考虑一下wix中的SQL扩展。作为一个简单的例子,我们来看看这段代码

添加sql命名空间
xmlns:sql=”http://schemas.microsoft.com/wix/SqlExtension“


在一个组件中,您可以添加

<sql:SqlScript  Id="CreateSchemaScript" BinaryKey="CreateSchema" ExecuteOnInstall="yes" Sequence="1" SqlDb="MyDB"/>

是指向包含所有可用元素的SQL架构定义的链接。我在SQL扩展方面做得不多,所以您可能需要阅读一些资料,以便更好地了解在安装时创建DB需要做些什么

这不是
的工作原理。
[#FileID]
语法用于动态使用组件文件的运行时安装完整路径

二进制文件通常用作自定义操作的临时提取文件,或者在本例中用作sql文件等

考虑一下wix中的SQL扩展。作为一个简单的例子,我们来看看这段代码

添加sql命名空间
xmlns:sql=”http://schemas.microsoft.com/wix/SqlExtension“


在一个组件中,您可以添加

<sql:SqlScript  Id="CreateSchemaScript" BinaryKey="CreateSchema" ExecuteOnInstall="yes" Sequence="1" SqlDb="MyDB"/>


是指向包含所有可用元素的SQL架构定义的链接。我在SQL扩展方面做得不多,所以您可能需要阅读一些资料,以便更好地了解在安装时创建DB需要做些什么

正如我提到的,我想同时使用SQLCMD(因为我的SQL脚本是SSDT格式)和二进制文件(所以文件将在安装结束时删除)

在寻找答案之后,我明白了我不能使用WiX[#filekey],因为只要没有正在运行的自定义操作,就不会提取二进制文件-显式使用它。 所以最后我明白了最好的方法是自己提取二进制文件。 我在一个自定义操作中使用的步骤是:

  • 从MSI二进制表中提取二进制SQL脚本
  • 在本地保存此文件
  • 使用-i和新文件路径(保存到的路径)运行SQLCMD
  • 删除SQL文件

  • 我遇到了一些值得提及的问题,如果您将文件保存到安装DIDER,可能会在自定义动作的TUN时间不存在目录,所以请考虑将其保存到TEMP文件夹或预先创建目录。p> 正如我提到的,我想同时使用SQLCMD(因为我的SQL脚本是SSDT格式)和二进制文件(所以文件将在安装结束时删除)

    在寻找答案之后,我明白了我不能使用WiX[#filekey],因为只要没有正在运行的自定义操作,就不会提取二进制文件-显式使用它。 所以最后我明白了最好的方法是自己提取二进制文件。 我在一个自定义操作中使用的步骤是:

  • 从MSI二进制表中提取二进制SQL脚本
  • 在本地保存此文件
  • 使用-i和新文件路径(保存到的路径)运行SQLCMD
  • 删除SQL文件

  • 我遇到了一些值得提及的问题,如果您将文件保存到安装DIDER,可能会在自定义动作的TUN时间不存在目录,所以请考虑将其保存到TEMP文件夹或预先创建目录。p> 这表示找不到该文件,您确定与CreateSchema.sql文件关联的文件ID实际上正确吗?是的,它是相同的ID,而且我在二进制表(用orca.exe打开)中检查了ID和二进制文件,您提到您不希望sql文件在之后继续存在,你没有把它排除在不存在的组件中,是吗?看着这是我能想到的唯一一件事。谢谢,这有助于我更好地理解它。这表明找不到该文件,你确定与CreateSchema.sql文件关联的文件ID实际上是正确的吗?是的,它是相同的ID,而且我检查了二进制表中的ID和二进制文件(用orca.exe打开)您提到您不希望sql文件在之后继续存在,您没有将其排除在缺少的组件中,是吗?看着这是我唯一能想到的。谢谢,它帮助我更好地理解它。谢谢,我没有使用sqlExtension,因为它不适合我,因为我的sql脚本是SSDT格式的,只能使用SQLCMD运行。您可以在前面看到我附加的答案。谢谢,我没有使用sqlExtension,因为它不适合我,因为我的sql脚本是SSDT格式的,只能使用SQLCMD运行。你可以看到我在前面附上的答案。