Здравствуйте, tantrum, Вы писали:
T>Доброго времени суток, увожаемый All! T>Возникла проблема, об которую набиваю себе большую шишку на голове. T>Проблема такая : T>Есть msi инсталляция, которая вызывает метод из DLL-ки (кустом акшэном). T>Этот метод из DLL-ки делает следующие вещи :
T>//1)Получает хендл открытой базы. T>hopenbase=MsiGetActiveDatabase(hInstall);
T>//2)Получает хендл view..
T>MsiDatabaseOpenView(hopenbase, T> __T("INSERT into `Property` (`Property`.`Property`, `Property`.`Value`) VALUES('propDummy', 'valDummy')")
T> ,&hview));
T>//3)Пытается его запустить... T>MsiViewExecute(hview,0)
T>Ну.. в этом случае возвращается код ошибки ERROR_FUNCTION_FAILED
T>..В общем, полный облом. T>Проблема в правах доступа к базе : T>//MSDN : T>For read-only access to the current database obtain the database handle by calling MsiGetActiveDatabase
T>Как это можно обойти? Как из кустом акшн процедуры получить доступ для записи в базу??? T>Если у кого-то есть решения — плиз помогите. T>Функция MsiOpenDatabase может получить хендл с доступом на запись... Но не могу представить, как её можно T>использовать из кустом-акшн DLL-процедуры?
T>Извините за такой экспрессивный мессадж... Буду благодарен за любую помощь!
Да, можно обойти. У меня к примеру добавляются custom action на лету. Нужно в конце SQL запроса просто дописать VALUES(.ля..ля..) TEMPORARY. Но изменения будут только в памяти, вроде то что нужно.