Готов поспорить, что это проблема вашего кода.Причиной сбоя на компьютере вашего клиента, а не на вашем, является то, что на вашем компьютере, вероятно, включена защита по умолчанию для защиты данных (DEP) (которая включена только для основных программ и служб Windows), в то время как компьютер вашего клиента фактически использует DEP по назначению(включено для всех программ и служб).
Настройка по умолчанию (которая совместима с более старыми версиями Windows, такими как 95/98 / ME), позволяет программному обеспечению выполнять код из сегментов данных.Более строгие настройки не позволяют этого, и вместо этого возникает исключение системного уровня.
Вы можете проверить настройки между ними, посмотрев Свойства системы.Сейчас я не на машине с Win7, но на WinXP вы попадаете туда, щелкнув правой кнопкой мыши на «Мой компьютер», выбрав «Свойства», выбрав «Параметры производительности», а затем выбрав вкладку «Предотвращение выполнения данных».Найдите его в Vista / Win7 с помощью справки;поиск защиты выполнения данных.
Решение, как говорили предыдущие ответы, заключается в установке MadExcept или EurekaLog.Вы также можете получить бесплатную версию как часть JEDI , в JCLDebug IIRC.Я не использовал это, поэтому я не могу поручиться за это лично.Я слышал, что это довольно хорошо.
Если вы не хотите идти по этому пути, установите точку останова где-нибудь в части запуска вашего приложения (убедитесь, что сборка включена с включенной информацией отладки).Запускайте ваше приложение, пока не будет достигнута точка останова, а затем используйте IDE Search-> Goto Address (который отключен, пока не будет достигнута точка останова).Введите адрес из диалогового окна исключения (не тот, который является почти всеми нулями, а адрес 0046C978, с префиксом $, чтобы указать, что это в шестнадцатеричном виде), как в $ 0046C978.Вы, вероятно, окажетесь в окне ЦП, глядя на ассемблерный код, но обычно вы можете выбрать какую-то строку кода Delphi, которая иногда может дать вам место для начала поиска.