Приложение VB6 на некоторых компьютерах не запускается, на других работает нормально - PullRequest
3 голосов
/ 03 сентября 2011

У меня есть приложение VB6, установщик скомпилирован с использованием INNO Setup. Установщик работает нормально. Но примерно на 10% компьютеров, когда пользователь нажимает на значок, чтобы запустить установленное приложение, оно не запускается, никаких сообщений об ошибках, только звуковой сигнал.

Это происходит в XP, а также в Win 7.

Я работаю в XP и Win 7, и приложение работает нормально, поэтому я не смог воспроизвести проблему.

Программа установки регистрирует все необходимые файлы ocx и dll (afaik). (Ну, не совсем все, предполагается, что компоненты времени выполнения MS должны быть там, но я предполагаю, что сообщение об ошибке должно появиться, если что-то отсутствует)

Я думал о каких-то пользовательских разрешениях, UAC, но даже у пользователей в группе администраторов была проблема.

Не могли бы вы указать мне, какие возможные проблемы нужно искать и тестировать для исправления приложения.

Спасибо!

[ПОСЛЕДУЮЩИЙ]

Благодаря подсказкам выяснилось, что манифест вызывает проблему. Я использую его, чтобы элементы управления выглядели лучше:

http://www.vbaccelerator.com/home/vb/code/libraries/xp_visual_styles/using_xp_visual_styles_in_vb/article.asp

Теперь я пытаюсь выяснить, почему. У меня есть другое приложение с тем же манифестом, и оно работает нормально.

Еще не удалось получить отзыв о программе просмотра событий.

Ответы [ 2 ]

3 голосов
/ 03 сентября 2011

«Сбой звукового сигнала» часто указывает на ошибку в манифесте приложения, такую ​​как ошибка синтаксиса XML или конфликт пространства имен.Журналы событий часто дают подсказку об этом.

Но я обнаружил, что люди часто пытаются использовать библиотеку Common Controls 6.0 без обеспечения правильной последовательности загрузки библиотеки.

Перед открытием любых формВы должны загрузить shell32, а затем comctl32.Самый простой способ - это пара неактивных вызовов в Sub Main:

Option Explicit

Private Declare Sub InitCommonControls Lib "comctl32" ()

Private Declare Function IsUserAnAdmin Lib "shell32" () As Long

Private Sub InitCommonControlsVB()
    IsUserAnAdmin
    InitCommonControls
End Sub

Private Sub Main()
    InitCommonControlsVB
    Form1.Show
End Sub

. Без этого ваша программа будет нормально работать в Vista или Win7, но не будет работать на некоторых пакетах обновлений XP и уровнях исправлений.Частично это происходит из-за изменений во времени в подсистеме Fusion, которая обрабатывает активацию SxS и патчи comctl32.dll.

Игнорируйте те, кто говорит, что вам нужно вызывать InitCommonControlsEx (), в этом нет необходимости, если вы не создаете ииспользование элементов управления Win32 напрямую вместо элементов управления VB6 и COM.

2 голосов
/ 03 сентября 2011

Несколько вещей, чтобы попытаться сузить это:

Проверьте журнал событий Windows на наличие сбоев

Проверьте журнал событий Windows (в разделе Приложение ) на наличие отчетов о сбоях из вашего приложения. Вы можете быстро перейти к просмотру журнала в Windows XP, нажав Пуск > Выполнить , набрав eventvwr и нажав Введите . В Windows 7 вы можете ввести «Просмотр событий» в поле поиска, которое находится в меню Пуск . Вы можете фильтровать события, чтобы показывать только события ошибок из вашей программы.

Вы можете найти несколько событий ошибок на одном из компьютеров, где эта проблема уже возникла, потому что похоже, что на этих компьютерах отключена функция отчетов об ошибках (в этом случае возникают «серьезные сбои», такие как нарушения прав доступа). журнал событий вместо отображения диалога об ошибках для конечного пользователя, если на компьютере не установлен отладчик).

Убедитесь, что «Отчет об ошибках» включен на уровне ОС

Как упоминалось в предыдущем разделе, похоже, что на этих компьютерах отключена функция отчетов об ошибках. В этом случае сбой вообще не будет отображать никаких сообщений конечному пользователю, и приложение просто внезапно исчезнет. В Windows XP вы можете проверить этот параметр (и включить его) следующим образом:

  1. Щелкните правой кнопкой мыши «Мой компьютер» и выберите Свойства .
  2. Откройте вкладку Advanced и нажмите кнопку Reporting Error .
  3. Выберите параметр Включить отчеты об ошибках .
  4. Нажмите OK , чтобы открыть все открытые окна.

Добавить код трассировки в ваше приложение

Вы также можете добавить некоторый код трассировки в код запуска вашего приложения, такой как код для отображения окна сообщения или записи сообщения в журнал событий Windows или в файл журнала, как только ваше приложение запускается (например, в событии Form_Initialize вашей основной формы или в процедуре Sub Main.

Таким образом, вы сможете определить, происходит ли сбой вашего приложения до или после загрузки среды выполнения VB6: если вы пытаетесь запустить приложение, оно исчезает / падает, и ваше сообщение о запуске не регистрируется, то вы знаете, происходит сбой еще до того, как у него появится шанс получить код запуска вашего приложения, что может указывать на то, что зависимость времени выполнения VB6 или самого времени выполнения VB6 установлена ​​неправильно.

Обратите внимание, что как Windows XP, так и Windows 7 поставляются с предустановленной средой выполнения VB6, но при этом неправильно работающие установщики могут перезаписывать или удалять файлы, являющиеся частью среды выполнения VB6.

...