0

我需要查询以使用 wix 代码和 C# 创建二进制表。

例如:如果在 msi 中不存在,我可以使用下面的代码创建“AppSearch”表

Database database = new Database(tempmsiPath, DatabaseOpenMode.Direct);
string  query = "CREATE TABLE `AppSearch` (`Property` CHAR(255) NOT NULL, `Signature_`   
                 CHAR(255) NOT NULL  PRIMARY KEY `Property`)";
database.Execute(query);
         

但是当我尝试

query = "CREATE TABLE `Binary` (`Name` CHAR(255) NOT NULL, `Data` Binary NOT NULL     
          PRIMARY KEY `Name`)";
database.Execute(query);                

我收到错误“ BadQuerySyntaxException 被捕获

SQL 查询语法无效或不受支持。数据库:\c:\xx.msi。SQL 查询 CREATE TABLE Binary( NameCHAR(255) NOT NULL, DataBinary NOT NULL PRIMARY KEY Name) 中的类型说明符“二进制”无效。

我需要这个的原因是我需要向二进制表添加条目,但有时 msi 在这种情况下没有二进制表,我需要创建表,否则我会收到错误未知表二进制。

有没有其他方法可以使用 c# 代码和 WIX 创建预定义的表“二进制”,或者让我知道我缺少什么?

谢谢!

4

3 回答 3

3

如果您使用EnsureTable 元素,即使这些表没有任何数据,WiX 也会使用这些表构建一个 MSI。那么您将不需要任何此代码。

于 2013-04-30T16:01:39.693 回答
1

我的印象是您使用 WiX 构建您的 MSI 并且缺少二进制表。如果您没有构建 MSI 并尝试添加二进制表(您通常会这样做以创建不在 MSI 本身中的转换),那么最简单的方法可能是:

一次:使用 ORCA:1) 创建 MSI 2) 将二进制表添加到 MSI。(右键单击,添加表) 3)将新表导出到 IDT 文件(右键单击,导出表)

结果将是一个名为 Binary.idt 的文件。它看起来像这样:(空格很重要,因为它是一个制表符分隔的文件,所以自己创建它;不要复制和粘贴)

Name    Data
s72 v0
Binary  Name

现在在 DTF 中,您可以使用 Database 对象上的 Import 方法将 IDT 作为 Binary 表导入数据库。

database.ImportTable("Binary.idt");
于 2013-05-02T11:23:07.030 回答
0

参考https://docs.microsoft.com/en-us/windows/desktop/msi/sql-syntax

SQL应该是

CREATE TABLE `Binary` (`Name` CHAR(72) NOT NULL, `Data` OBJECT NOT NULL PRIMARY KEY `Name`)
于 2019-05-24T07:43:23.400 回答