Так как сейчас в моем распоряжении нет компьютера с Windows 7 64 bit прошу прояснить следущую ситуацию: пользовательская программа у одного из моих пользователей на данной операционке ведет себя как то странно:
первый раз — запускается и работае без проблем.
Второй раз запускаем — выдает сообщения:
Exception ERegistryException in module.
Failed to set data for "".
— Это сообщение винды.
Далее следует пойманый exception моей программы:
Can"t allocate memory for flags file!
Вот код где это происходит:
var
FlagBuffer: array of byte;
procedure LoadFlagFileToBuffer;
var
FSize, CurrRead, TotalRead: integer;
FlagFile: integer;
PFlagBuffer: ^byte;
begin
FlagFile := FileOpen(ExtractFilePath(ParamStr(0)) + "flags.dll", fmShareDenyNone);
FSize := GetFileSize(ExtractFilePath(ParamStr(0)) + "flags.dll");
try
SetLength(FlagBuffer, FSize);
PFlagBuffer := @FlagBuffer[0];
try
. данный код пропущен, т.к. он вызывает уже другое сообщение Except.
except
Application.MessageBox("Can""t load flag file!", "Error!", MB_OK);
end;
except
Application.MessageBox("Can""t allocate memory for flags file!", "Memory error!", MB_OK);
end;
FileClose(FlagFile);
TotalFlags := FSize div 108;
end;
Получается что ошибка возникает при попытке
SetLength(FlagBuffer, FSize);
Программа работает у более чем 200 пользователей на операционках от Win98 до Windows 7 32 bit без проблем.
А тут на 64 bit — проблема.
Есть какие нибудь идеи?

← →
Palladin © ( 2009-12-23 20:57 ) [1]
ну например заЮзать FastMM

← →
Alex_C ( 2009-12-23 20:58 ) [2]
Да при завершении программы выполняется
procedure FeeFlagBuffer;
begin
SetLength(FlagBuffer, 0);
end;

← →
Alex_C ( 2009-12-23 20:59 ) [3]
Юзаю FastMM.
Может конечно не последней версии — завтра проверю!
Спасибо за идею!

← →
MBo © ( 2009-12-23 21:01 ) [4]
Есть уверенность, что FSize ненулевой?

← →
Alex_C ( 2009-12-23 21:09 ) [5]
> Есть уверенность, что FSize ненулевой?
Ну если в первый раз выполняется — значит все верно.
Да у меня тоже есть некоторые сомнения на счет
FSize := GetFileSize(ExtractFilePath(ParamStr(0)) + "flags.dll");
Собственно выбора то особо и нет.
Ну а почему во второй раз работы программы он нулевым становится?

← →
Alex_C ( 2009-12-23 21:14 ) [6]
А я вот сейчас подумал — а не тут ли ошибка:
не маловато ли для 64 разрядной системы?

← →
Palladin © ( 2009-12-23 21:27 ) [7]
а не маловата ли редиска для огорода )

← →
Игорь Шевченко © ( 2009-12-23 21:56 ) [8]
а вместо SetLength и извратов с дин. массивом тупо GetMem делать ?

← →
Alex_C ( 2009-12-23 21:58 ) [9]
> а вместо SetLength и извратов с дин. массивом тупо GetMem
> делать ?
Да попробую.
Но что ж получается — у меня не один в программе SetLength — чтож везде менять?

← →
sniknik © ( 2009-12-23 22:38 ) [10]
except
Application.MessageBox("Can""t load flag file!", "Error!", MB_OK);
end;
except
Application.MessageBox("Can""t allocate memory for flags file!", "Memory error!", MB_OK);
end;
честное слово, доведут, буду предлагать убивать за такое (пока только увольнять). а потом еще и плачутся, "а что там такое? есть ли идеи?"
НЕЛЬЗЯ ПРЯТАТЬ ОШИБКИ. обработка их это не замена на своими, это совсем совсем другое.
еще хорошо первая проскочила, не ожидал видать там, не успел "обработать". %)

← →
Игорь Шевченко © ( 2009-12-23 23:58 ) [11]
> буду предлагать убивать за такое
Я поддержу, если что.

← →
Alex_C ( 2009-12-24 08:58 ) [12]
> НЕЛЬЗЯ ПРЯТАТЬ ОШИБКИ. обработка их это не замена на своими,
> это совсем совсем другое.
Да я совершенно с этим согласен. Только скажите тогда: вот сейчас мне мой пользователь написал мое замененное сообщение об ошибке — сейчас мне хотя бы понятно, в каком месте программы она выскочила.
Ну хорошо — уберу я свою обработку ошибки. Напишет мне пользователь сообщение об шибики которое винда выдает и что. Как я пойму в каком месте программы оно получается?

← →
RWolf © ( 2009-12-24 09:21 ) [13]
> а вместо SetLength и извратов с дин. массивом тупо GetMem
> делать ?
тогда придётся следить за освобождением памяти самому.

← →
sniknik © ( 2009-12-24 09:35 ) [14]
> Как я пойму в каком месте программы оно получается?
нормально обрабатывать, это что то вроде — вести лог с записью когда, где, класс ошибки, и реальное сообщение ошибки (не авторский перевод, не отсебятину а именно реальное). т.е. она должна давать всю значимую информацию, а не скрывать просто ради "привет, я случилося здеся!".
т.е. если нормально то не только поймешь, а тебе могут даже на почту отчет выслать (есть и такие логеры которые так делают).

← →
Alex_C ( 2009-12-24 11:13 ) [15]
Ну хорошо.
Если отвлечься от кода:
программа давно работает у большого количества пользователей на разных версиях винды. Вопрос: что принципиального может повлиять на работу программы в 64-битной версии Windows 7 (особенно если учитывать, что в 32-битной версии все работает)?
И самый главный вопос: первый раз программа запускается и работает. Повторно — ошибка.

← →
RWolf © ( 2009-12-24 11:55 ) [16]
ну так какая ошибка-то? с этого же нужно начинать отладку. А чтобы выяснить — нужно заменить сообщение в обработчике ошибки на вменяемое.

← →
sniknik © ( 2009-12-24 12:18 ) [17]
первое вменяемое (забытое для обработки) сообщение
> Exception ERegistryException in module.
> Failed to set data for "".
нет доступа(ошибка реестра) к реестру, что то не инициализировалось, т.е. либо nil либо "испорченная" память.
в общем если на догадках то замена на нормальные сообщения даст там AV (делайте ставки господа ;))
> Если отвлечься от кода:
>.
> особенно если учитывать, что в 32-битной версии все работает
а почему у меня не работает холодильник? таких как у меня у большого количества пользователей, что принципиально может на него влиять? (особенно если учесть, что даже у соседа работает, а у него такой же. ).

← →
sniknik © ( 2009-12-24 12:28 ) [18]
там бы еще по хорошему сделать типа
FSize := GetFileSize(ExtractFilePath(ParamStr(0)) + "flags.dll");
Win32Check(FSize<>$FFFFFFFF);

← →
Slym © ( 2009-12-29 05:56 ) [19]
Hello!
We had bought DeveloperExpressVCLProducts ver.6.27
After downloading package: "Complete Download: BCB 5,6,2006 Delphi 5,6,7,2005,2006,2007",
we were trying to run Setup.exe, ang got error message "MessageBox: Exception ERegistryException in module Setup.exe at 000032C74.
Failed to get data for ‘Build’."
here is md5 checksum for downloaded file
1F95614BE30CF799202AACE42C238C0C DeveloperExpressVCLProducts.exe
Please help to find out the cause of this error and install the component?
Dear Ivan,
First of all, let me thank you for choosing our tools. We appreciate the confidence you have placed in our company and hope that they meet your expectations now and in the future. Hopefully, they will allow you to create powerful and flexible applications with less effort.
It is a pity that you have encountered such errors when installing our components. By design, the Express Install stores some information in the registry. Thus, you must be logged into an account with administrative privileges. Please verify this point and let us know about your progress.
Thanks,
Serge
My account with administrative privileges.Antivirus and Firewall is disable when i run setup.exe
Hi Ivan,
This actually makes the situation odder. Did you have our components installed previously? If so, I recommend that you completely remove them. Then, open the registry editor (Regedit.exe) and look for the following registry key:
‘HKEY_LOCAL_MACHINESOFTWAREDeveloper Express VCL Products
If found, please remove it. This should help you overcome the problem.
Please keep us informed about your results.
Thanks,
Serge
Thanks you, now successfully installed.
Thanks you.
After delete regkey:
‘HKEY_LOCAL_MACHINESOFTWAREDeveloper Express VCL Products
DevExpress successfully installed
Hi Ivan,
Thank you for informing us that the problem is resolved. I am glad that our assistance was helpful. Please feel free to contact us in case of any difficulties. We are happy to help you at any time.
Thanks,
Serge
Добрый день! Вам бы ещё добавить функцию отправки отчёта по email.
Сообщение #14, написано в понедельник, 21 октября 2013 года, в 11:38
Ответ: Здравствуйте, Екатерина!
Благодарю Вас за поданную идею. Постараюсь рассмотреть возможность ее реализацию при выпуске новой версии программы.
С уважением, Стародубов Денис.
Что если при покупке я указал неправильное имя и в программе(в поле "Программа зарегистрирована на:")ошибка?
Сообщение #13, написано в четверг, 17 октября 2013 года, в 16:23
Ответ: Борис, здравствуйте!
В таком случае Вы можете отправить нам на электронный адрес, который указан на главной странице сайта, Ваш Код активации, при помощи которого производилась регистрация программы (это поможет Вас идентифицировать), а так же желаемое имя, на которое Вы хотите зарегистрировать программу и Вам будет выслана новая регистрационная информация.
С уважением, Стародубов Денис.
Эта программа очень хорошая.
Сообщение #12, написано в четверг, 10 октября 2013 года, в 14:34
Ответ: Борис, здравствуйте!
Я искренне рад, что программа Knowing оставляет у Вас только положительные впечатления!
Программа просто отличная!
Но есть вопрос!
Как убрать функцию "Сначала" которая расположена прямо в тесте?
Очень нужно убрать! 
Сообщение #11, написано в пятницу, 13 сентября 2013 года, в 3:19
Ответ: Артем, здравствуйте!
Спасибо за положительный отзыв!
К сожалению, в текущей версии такой возможности нет. Обязательно учту Ваше пожелание и внесу дополнительную опцию в следующую версию программы, которая позволит при необходимости отключить кнопку "Сначала" в окне тестирования.
Спосибо Вам огромно за бесплатную версию тестирования!!
Сообщение #10, написано во вторник, 3 сентября 2013 года, в 18:13
Ответ: Здравствуйте, Виталий!
Но если Вы имеете в виду предыдущую, бесплатную версию Knowing 1.02, то обратите внимание на вторую версию программы. Она обладает значительно большим функционалом.
Еще момент не проверял, но
Если я покупаю программу она привязывается к моему компьютеру или я могу устанавливать ее на другой? Если привязывается, то как я могу тестировать людей на работе, создаю тесты я на домашнем компьютере.
Сообщение #9, написано в пятницу, 19 июля 2013 года, в 21:33
Ответ: Александр, здравствуйте!
В новой версии программы, которую я планирую в ближайшие месяц-два выпустить предусмотрена возможность указать имя тестируемого перед началом теста. По завершении теста, как и в версии 2.01, будет возможность просмотреть отчет, а так же сохранить его в файл. Сохранять отчет можно будет как в виде текстового файла, так и в виде HTML-файла с изображениями и форматированием.
Если я Вас правильно понял, Вам хотелось бы видеть функцию автоматического ведения архива проведенных тестов. Если так, то думаю, добавлю такую опцию в предстоящую версию. Я представляю это следующим образом:
По завершении теста в определенный каталог автоматически будет сохраняться текстовый файл-отчет с именем состоящим, например, из фамилии и даты/времени проведения теста. Соответственно будет возможность в любой момент обратиться к этому архиву.
Если у Вас есть дополнительные пожелания или уточнения по этому моменту, с радостью Вас выслушаю.
По поводу второго Вашего сообщения:
Да, одна лицензия программы предусматривает возможность ее использования только на одном ПК. В описанном Вами случае необходимо иметь две лицензии. Например, домашнюю и коммерческую.
Понравилась программа, хотел купить, но не нашел:
Не увидел возможности ведения архива тестируемых лиц, если я тестирую людей на работе, то хочу видеть результаты и после окончания тестирования, желательно развернутые.
Добавьте возможность минимальной регистрации тестируемого и вывод отчетов со списками.
Сообщение #8, написано в пятницу, 19 июля 2013 года, в 21:18
С ошибкой разобрался: программа запускается только от имени учетной записи Администратора. Спасибо автору за программу! Хотелось бы узнать, как она создавалась, если это не секрет?
Сообщение #7, написано в четверг, 4 июля 2013 года, в 18:43
Ответ: Здравствуйте Николай!
Спасибо за сообщение!
Эта ошибка может возникать в случае запуска программы с ограниченными правами. Программе Knowing требуется все права на чтение и запись в реестр, т.к. ее настройки хранятся именно в нем.
По поводу создания программы. Первая версия была разработана еще в 2004 году, но обладала крайне ограниченным функционалом и адаптировалась еще под Windows 98/XP. Затем был длительный перерыв, когда программа была заброшена, но год-два назад вновь решил заняться доработкой и улучшением этой программы. Тогда и появилась вторая версия, где код программы практически был переписан с нуля.
В скором времени планируется очередная версия Knowing, в которой будет много новых возможностей и функций. Если коротко: 8 типов вопросов (единичный/множественный выбор, ручной ввод ответа, последовательность вариантов, истинность утверждения и другие), сетевые функции, гибкая система оценки знаний, новый формат фалов тестов (тест храниться в одном упакованном файле вместе с изображениями), возможность прикрепления к вопросам текстовых и любых других файлов и еще много других нововведений.
Николай, если обнаружите какую-либо ошибку или неточность в работе программы, сообщите об этом. Исправлю в предстоящей версии.
Возникает проблема при работе с программой Knowing 2.
Зарегистрированная версия для домашнего пользования.
При первом запуске программа работает нормально. При последующем — программа не запускается, выдает ошибку: Exception ERegistryException in module Knowing.exe at 0003862A. Failed to set data for `S2`.
Прошу Автора разъяснить эту проблему!
Сообщение #6, написано в четверг, 4 июля 2013 года, в 18:28
Уже прошло 15 минут. Письма нет. Папка "Спам пуста". Почта: mail.ru.
Сообщение #5, написано во вторник, 18 июня 2013 года, в 12:12
Ответ: Борис, Здравствуйте!
Вами был выбран способ оплаты Банковский перевод.
В этом случае регистрационные данные будут отправлены Вам сразу же, как только от Вас будет получена оплата.
Вам необходимо распечатать квитанцию или реквизиты, которые доступны на втором шаге покупки, и произвести оплату в ближайшем отделении Сбербанка или в любом другом банке.
Имейте в виду, может потребоваться до нескольких банковских дней для получения платежа. Это напрямую зависит от банка, через который осуществляется платеж.
Для "быстрой" покупки Вы можете воспользоваться электронными средствами оплаты, такими, как WebMoney.



