I have listbox in dialog: <Control Type="ListBox" Property="SELECTEDGUICONFIG" Id="GUIConfigsList" Width="280" Height="91" X="25" Y="70"> <ListBox Property="SELECTEDGUICONFIG"> <ListItem Text="Ничего не делать" Value="0"/> </ListBox> </Control>
Custom action: <InstallUISequence> <Custom Action="CAFillSavedConfigs" After="AppSearch"/> </InstallUISequence> C++ code: void LogMsiMessage(MSIHANDLE hInstall, LPCWSTR szText) { PMSIHANDLE hErr = MsiCreateRecord(1); MsiRecordSetString(hErr, 0, szText); MsiProcessMessage(hInstall, INSTALLMESSAGE_INFO, hErr); } extern "C" UINT __stdcall FillSavedConfigs (MSIHANDLE hInstall) { TCHAR lPath[MAX_PATH], lPath1[MAX_PATH]; DWORD len = MAX_PATH; //Получаем полный путь к файлу установки MsiGetProperty(hInstall, L"OriginalDatabase", lPath, &len); //Ищем индекс последнего слэша в пути int i = wcslen(lPath); while ((i > 0) && (lPath[i] != '\\')) i--; //Копируем путь к файлу wcsncpy_s(lPath1, lPath, i); WIN32_FIND_DATA sr; HANDLE hF; wcscat_s(lPath1, TEXT("\\*.brf")); if ((hF = FindFirstFile(lPath1, &sr)) != INVALID_HANDLE_VALUE) { //Получаем текущую базу PMSIHANDLE hDB = MsiGetActiveDatabase(hInstall); int i = 2;//поле Order в таблице ListBox do { //Пишем в лог данные swprintf_s(lPath, L"Found config file: %s", sr.cFileName); LogMsiMessage(hInstall, lPath); //Добавляем строку в листбокс //Формируем запрос swprintf_s(lPath, L"INSERT INTO ListBox VALUES ('SELECTEDGUICONFIG', %d, '%d', '%s')", i++, i, sr.cFileName); //Пишем его в лог LogMsiMessage(hInstall, lPath); //Открываем вид MSIHANDLE hView; UINT res; if ((res = MsiDatabaseOpenView(hDB, lPath, &hView)) != ERROR_SUCCESS) { if (res == ERROR_BAD_QUERY_SYNTAX) LogMsiMessage(hInstall, L"MsiDatabaseOpenView() error!: ERROR_BAD_QUERY_SYNTAX"); if (res == ERROR_INVALID_HANDLE) LogMsiMessage(hInstall, L"MsiDatabaseOpenView() error!: ERROR_INVALID_HANDLE"); PMSIHANDLE hErr = MsiGetLastErrorRecord(); MsiProcessMessage(hInstall, INSTALLMESSAGE_INFO, hErr); } else { //Выполняем запрос if (MsiViewExecute(hView, NULL) != ERROR_SUCCESS) LogMsiMessage(hInstall, L"MsiViewExecute() error!"); //Записываем изменения if (MsiDatabaseCommit(hDB) != ERROR_SUCCESS) LogMsiMessage(hInstall, L"MsiDatabaseCommit() error!"); //Закрываем хэндлы MsiViewClose(hView); MsiCloseHandle(hView); } } while (FindNextFile(hF, &sr) != 0); //MsiDatabaseCommit(hDB); MsiCloseHandle(hDB); FindClose(hF); } return ERROR_SUCCESS; } At log I see errors: 11:49:59: CAFillSavedConfigs. MSI (c) (98:5C) [11:49:59:156]: Invoking remote custom action. DLL: C:\DOCUME~1\vunder\LOCALS~1\Temp\MSI27B9.tmp, Entrypoint: FillSavedConfigs Found config file: 1.brf INSERT INTO ListBox VALUES ('SELECTEDGUICONFIG', 2, '2', '1.brf') MSI (c) (98:DC) [11:49:59:359]: Note: 1: 2237 2: 3: INSERT INTO ListBox VALUES ('SELECTEDGUICONFIG', 2, '2', '1.brf') 4: MsiDatabaseOpenView() error!: ERROR_BAD_QUERY_SYNTAX DEBUG: Error 2237: Database: . Invalid or missing query string: INSERT INTO ListBox VALUES ('SELECTEDGUICONFIG', 2, '2', '1.brf') What am I doing wrong? -- View this message in context: http://n2.nabble.com/Problems-with-adding-items-to-ListBox-tp4875793p4875793.html Sent from the wix-users mailing list archive at Nabble.com. ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users