Я обнаружил MsiDatabaseOpenView, возвращающий 1615 (ERROR_BAD_QUERY_SYNTAX) с, казалось бы, действительным запросом , но это не совсем та же проблема - в этом запрос был изменен и работал без определенной вставки.Я также нашел сообщение где-то, где обсуждалась та же ошибка, но причина была в том, что запрашиваемая таблица не существовала.
В моем случае запрос должен быть действительно простым: SELECT * FROM Property
(Не обязательно быть таблицей свойств, любая таблица дает такой же результат).Код, используемый для выполнения запроса, также прост:
IntPtr dbhandle = IntPtr.Zero;
IntPtr viewhandle = IntPtr.Zero;
int result = 0;
MsiOpenDatabase(@"<base MSI path goes here>", (IntPtr)2, ref dbhandle);
// Apply transforms 1 and 2
MsiDatabaseApplyTransform(dbhandle, @"<first transform path>", 0);
MsiDatabaseApplyTransform(dbhandle, @"<second transform path>", 0);
viewhandle = IntPtr.Zero;
result = MsiDatabaseOpenView(dbhandle, "SELECT * FROM `Property`", ref viewhandle);
Странная часть: я получаю возврат 1615 только при двух преобразованиях.Либо преобразование работает индивидуально, и пакет устанавливается правильно с обоими преобразованиями на месте.У нас есть несколько приложений с двумя преобразованиями, и все они имеют одинаковое поведение.
Оба вызова MsiDatabaseApplyTransform, похоже, работают (по крайней мере, они возвращают 0).Включение ведения журнала MSI не создает никаких журналов.
Кто-нибудь знает, что происходит / где искать?