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
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users