使用wix代码和C#创建二进制表

时间:2013-04-30 15:16:46

标签: c# wix windows-installer

我需要查询使用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查询中的类型说明符'Binary'无效CREATE TABLE BinaryName CHAR(255)NOT NULL,Data二进制NOT NULL PRIMARY KEY Name)。

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

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

谢谢!

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

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

Name    Data
s72 v0
Binary  Name

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

database.ImportTable("Binary.idt");

答案 2 :(得分: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`)