MsiDatabaseOpenView возвращает 1615 с 2 преобразованиями - PullRequest
0 голосов
/ 03 июня 2011

Я обнаружил 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 не создает никаких журналов.

Кто-нибудь знает, что происходит / где искать?

1 Ответ

0 голосов
/ 05 июня 2011

Попробуйте посмотреть, что MsiGetLastErrorRecord говорит вам.Также рассмотрите возможность установки политики Debug для получения более подробной информации, передаваемой в журнал (я полагаю, она отображается в потоке отладки, видимом с dbgview ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...