Название: Attempt to write to read-only database Отправлено: Yuriy от Октября 12, 2011, 21:35 Всем привет. Вчера впервые решил опробывать работу своих программ в Windows 7 64 bit.
Сборку делал на Win XP 32 bit. Все безупречно работает. Но вот почему то в новой версии виндоуз выдает ошибку при попытке записи данных в БД SQlite3: Attempt to write to read-only database. В чем может быть дело ? Может быть кто-нибудь уже сталкивался ? Название: Re: Attempt to write to read-only database Отправлено: Пантер от Октября 12, 2011, 21:36 Права есть на запись?
Название: Re: Attempt to write to read-only database Отправлено: BRE от Октября 12, 2011, 21:37 В чем может быть дело ? Может быть кто-нибудь уже сталкивался ? В правах к самому файлу или папке где он лежит. Ты его не в Program Files положил?Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 12, 2011, 21:40 Я честно говоря не знаю. Документы сохраняются и в папку программы и там откуда считываю БД, но вот например на C: не сохраняются. Думаю это такой трюк Win 7. Пользоваться этой поделкой от M$ не собираюсь, но вдруг кто-нибудь будет использовать мое приложение под Win7, нужно быть уверенным, что все работает.
у меня два exe-шника и оба лежат C:\Visual3D\bin Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 12, 2011, 21:43 И в эту папку пишутся файлы, конфиги, и читаются без проблем из под программы. Без проблем создаются файлы из под моей программы с помощью fopen, fflush и fclose. Только не в корневой папке C: А БД почему-то не сохраняются. Вообще я использую БД SQlite3 и не задаю userName, password, port и hostName при открытии БД. Может быть дело в этом ???
Название: Re: Attempt to write to read-only database Отправлено: Пантер от Октября 12, 2011, 22:01 Покажи как создаешь подключение.
Название: Re: Attempt to write to read-only database Отправлено: BRE от Октября 12, 2011, 22:03 [off] Микрософт наконец дошел до того, что права доступа все таки нужны, добавили их в win7 (ну через жопу конечно сделали), а пользователи не поняв что это все для их блага, либо сразу отрубают UAC, либо по традиции работают с админскими правами. :) Сам недавно столкнулся, пришлось проработать вопрос...
Еще понравилось решение вопроса с повышением привилегий программ-установщиков. Кто-то скажет нужен специальный файл манифест, где все это будет описано, но есть способ проще. Используется специальный эвристический алгоритм, который анализирует имя запускаемого файла и если там есть что-то типа setup, install или чего-то подобного, до венда без всяких манифестов запросит пароль и поднимет привилегии этому процессу. :) [/off] Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 12, 2011, 22:06 В одной статические функции, а в первой (потому как реже используются БД) обычным классом:
Добавляю соединение: Код: void readconstants::openDB(const int &Type) Здесь работаю с БД разными функциями Код: void writedb::writePanelsState(const QString &fileName,const QByteArray &geo_data,const QByteArray &layout_data) Убираю соединение: Код: void readconstants::closeDB(const int &Type) Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 12, 2011, 22:10 [off] Микрософт наконец дошел до того, что права доступа все таки нужны, добавили их в win7 (ну через жопу конечно сделали), а пользователи не поняв что это все для их блага, либо сразу отрубают UAC, либо по традиции работают с админскими правами. :) Сам недавно столкнулся, пришлось проработать вопрос... Еще понравилось решение вопроса с повышением привилегий программ-установщиков. Кто-то скажет нужен специальный файл манифест, где все это будет описано, но есть способ проще. Используется специальный эвристический алгоритм, который анализирует имя запускаемого файла и если там есть что-то типа setup, install или чего-то подобного, до венда без всяких манифестов запросит пароль и поднимет привилегии этому процессу. :) [/off] Ну и хрень, как бы тогда права 0666 установить с помощью InnoSetup скрипта на установленную папку. ;D И еще не смог WiFi подключить под эту ОС, поэтому в Debian или Win XP могу только выйти на форум, потом уже перезагружать в Win 7 и пробывать... Вообщем бред из бреда. Название: Re: Attempt to write to read-only database Отправлено: Пантер от Октября 12, 2011, 22:12 В InnoSetup это делается очень легко, на сколько я помню. Поищи в хэлпе. А еще лучше, создавай БД в ApplicationData.
Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 12, 2011, 22:28 погуглил немного, а то ведь в Win 7 инета не будет ;D
http://sqlite.phxsoftware.com/forums/t/1163.aspx Решение следующее: This a reccurrent error in Vista and 7. The user must set the administrator privileges to the aplication in the properties. Otherwise the error appears. И всего - навсего нужно будет объяснить конечным пользователям это же. Создать какую-нибудь политику и куда-нибудь ее всунуть! Блин, как же это все напрягает если честно. Эти sheduled task'и пачками, которые невозможно отключить, это шерстение на жестком диске, вся эта "умная" Windows'овская обработка в тихушку ! Блин это не система а вирус Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 12, 2011, 22:37 А вот и решение по запуску программ с повышенными привелегиями, которое я теперь заучу и буду диктовать по телефону своим клиентам:
1) Запускаете планировщик заданий (Пуск ---> Все программы ---> Стандартные ---> Служебные ---> Планировщик заданий) 2) Нажимаете "Создать задачу" 3) Указываете Имя для новой задачи и ставите флажок "Выполнять с наивысшими правами" 4) Переходите на вкладку Действия, нажимаете "Создать", в следующем окне нажимаем "Обзор" 5) Указываете путь к нужному приложению и нажимаете "Открыть" 6) Нажимаете "ОК", затем снова "ОК" 7) Создайте ярлык на рабочем столе ( Нажмите правую кнопку мыши, выберете "Создать" ---> "Ярлык") 8) В поле Расположение объекта введите: schtasks /run /tn mytask_admin где mytask_admin - имя созданной нами задачи. Если в имеми содержаться робелы, обязательно укажите его в кавычках. 9) Введите имя ярлыка и нажмите Готово И кто мне скажет, что такой подход - не КОСТЫЛЬ ? И после этого еще кто-то говорит что Linux для "красноглазых" ??? Название: Re: Attempt to write to read-only database Отправлено: Пантер от Октября 12, 2011, 22:40 Что-то больно все сложно. Уверен, что это единственное решение?
Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 12, 2011, 22:45 Пантер, спасибо за Ваше участие в обсуждении проблемы.
Я немного расстроился. Нужно было модели доделывать, а я два дня с этим Win 7 занимаюсь вместо основной работы. Ну а как же еще. Либо сторонние приложения использовать типа Elevated Shortcut, либо демон писать и его в службы засовывать, либо вот так по телефону клиентам толдычить. Возможность переноса папки с программой в этом случае проблематичная. Я всегда делал программы Portable, которые имеют свои настройки и содержатся в пределах одной папки, а теперь придется вот такие трюки выполнять и как только клиент переустановит Windows снова ему перезаряжать программу. А может быть какой-нибудь exe-шничек сейчас сварганю, типа FirstConfig.exe чтобы он вшивал программу в систему, но уж очень я не люблю таких вещей. Название: Re: Attempt to write to read-only database Отправлено: Пантер от Октября 12, 2011, 22:47 Мне все равно кажется, что есть простое решение. К сожалению, сейчас под рукой нет винды, но завтра на работе постараюсь глянуть, если время будет.
Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 12, 2011, 22:54 Мне все равно кажется, что есть простое решение. К сожалению, сейчас под рукой нет винды, но завтра на работе постараюсь глянуть, если время будет. Буду очень признателен. Я еще не совсем вник, но судя по всему есть такая UAC , которую отключают либо запускают систему под администратором. Речь идет о простых пользователях, которым нужен ярлык на рабочем столе и все. Поэтому я поставил Win 7 с ориг образа, такой как у всех, без изменений. И возможны еще проблемы. Создание таких ярлыков может быть недоступно в версиях типа home, starter и т.д. Все это нужно проверять. Очень обломно с вин работать. Завтра поговорю с клиентами, может быть они на Linux согласятся. Название: Re: Attempt to write to read-only database Отправлено: loneybibi от Октября 13, 2011, 00:01 Не расстраивайся ! :) Все намного проще! Согласен windows == вирус :)))
Сам когда свое приложение собирал под Win7, тоже не мог записать ничего в файл. Программа находилась на диске С и UAC блокировал все попытки программы писать в файл и даже просто сохранить какую то информацию в текстовом файле. Проблема была в том что Win7 UAC требует у программы права на запись файла, которые она должна получить при запуске. Вообщем решил это с помощью manifest файлов. Вот тема на форуме решение в конце описано мной подробно (будут вопросы пиши ICQ:400055065): http://forum.vingrad.ru/forum/topic-332538/kw-user-account-control/hl/manifest/index.html#st_15_view_0 Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 13, 2011, 02:29 Спасибо огромное, loneybibi !
Это отличная мысль, буду пробывать !!! Я пару лет назад на WineHQ.org подробно описывал использование манифестов, извлекая его из msaccess.exe и просто выкладывал в одном каталоге вместе с исполняемыми файлами windows. Под wine'ом Access2007 не шел именно из за этих манифестов, которые в нем были зашиты, но он их не видел: http://bugs.winehq.org/show_bug.cgi?id=19297 Но я честно только сейчас узнал про секцию trustInfo. Это здорово как только опробую, напишу о результатах сего происка !!! Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 18, 2011, 13:52 Отписываюсь по результатам:
Действительно, проблема оказалась в административных привилегиях Windows Seven. Для того чтобы база данных SQLite3 могла писать необходимо запустить свою программу как администратор. Либо прописать в .manifest requestedExecutionLevel level="highestAvailable" для отключения зашивки манифестов можно добавить в файл проекта следующую строку: CONFIG -= embed_manifest_exe и тогда будет создан manifest в одной папке с исполняемым файлом. Его можно отредактировать, либо использовать Restorator или любой другой хак ресурсов. И переписать права доступа. При этом в Seven'е на иконке Вашего приложения появится значок радиации желтого цвета и при запуске программа будет кричать, типа давай не будем запускать это приложение, оно хочет привилегий, хочет делать записи и т.д. Вот такая печальная история.... Название: Re: Attempt to write to read-only database Отправлено: LisandreL от Октября 18, 2011, 14:48 А вы базу то храните в %APPDATA% (или %ALLUSERSPROFILE%, если она общая для всех пользователей) или где бог на душу положит?
Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 18, 2011, 15:40 Там 5 - 12 баз данных (создаются в процессе работы) и все в пределах C:\Visual3D\
Одна для хранения ImageCache, другая для Покупателей, третья с Прототипами и т.д. работаю с ними с использованием ATTACH DATABASE, но проблема не в этом. Не знаю как еще отключить этот самый UAC, может быть после его отключения пропадут значки радиации и всякие Windows'овские ужасающие предупреждения ;D Только что обратил внимание: на моем аватаре написано Чайник. Поправьте кто-нибудь пожалуйста. Название: Re: Attempt to write to read-only database Отправлено: Пантер от Октября 18, 2011, 15:54 Только что обратил внимание: на моем аватаре написано Чайник. Поправьте кто-нибудь пожалуйста. Наберешь нужное количество сообщений, надпись поменяется.Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 18, 2011, 20:06 Мне просто кажется непристойным название моего профиля "Чайник". Напишите что-нибудь поприличнее. Или сотрите мой профиль ко всем чертям.
Название: Re: Attempt to write to read-only database Отправлено: BRE от Октября 18, 2011, 20:47 Мне просто кажется непристойным название моего профиля "Чайник". Напишите что-нибудь поприличнее. Или сотрите мой профиль ко всем чертям. В настройках профиля можешь сам написать что хочешь. :)Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 18, 2011, 21:33 8) увы php скрипты не грузятся вместо аватаров. Придется много-много писать сообщений по делу и зарабатывать себе статус. Будем стараться ;).
Название: Re: Attempt to write to read-only database Отправлено: loneybibi от Октября 19, 2011, 08:31 Не знаю как еще отключить этот самый UAC, может быть после его отключения пропадут значки радиации и всякие Windows'овские ужасающие предупреждения ;D Только что обратил внимание: на моем аватаре написано Чайник. Поправьте кто-нибудь пожалуйста. Зачем его отключать!? :) Я тебе давал ссылку на форум винграда на мой пост по манифестам, думаю некоторые моменты ты упустил. В конце есть ссылка (последняя, да и не только, на хабр ссылка тоже про манифесты описывает способы обхождения Uac) на доп. документацию на msdn на русском, там описывают работу утилиты MageUI для создание манифестов. В моем посте приведен шаблон манифеста самый простой. Есть еще параметр такой как TrustLevel который может быть = FullTrust. И если ты не хочешь что бы приложение спрашивало пользователя о повышении административных прав то подпиши приложение цифровым подписью что бы UAc не кипишевал и не выдавал запросов, если вообще полный доступ к win то цифровым сертификатом (на msdn и про создание и получение pfx сертификатов написано тоже) , укажи его в манифесте и приложение будет получать полные административные права без участия пользователя и всяких запросов. :) Мат часть: MageUI с графическим интерфейсом для создание манифестов в том числе и FullTrust http://msdn.microsoft.com/ru-ru/library/acz3y3te.aspx MakeCertificate создание тестовых сертификатов самому локально для отладки http://msdn.microsoft.com/ru-ru/library/bfsktky3.aspx Название: Re: Attempt to write to read-only database Отправлено: Yuriy от Октября 19, 2011, 19:15 Спасибо, loneybibi.
Буду дальше изучать. Напишу о результатах. А еще лучше составлю FAQ для тех кто пишет приложения с использованием QSLite3 для Windows. Думаю эта тема будет полезна со временем. |