Наверное, каждый из Вас имел опыт работы с программой Package & Deployment Wizard. Вспомнили так называемую "досадную" ошибку? Так вот, в этой статье описано как подправить сам PDW, чтобы Ваши инсталляционные пакеты работали правильно.
Вы создали Ваш очередной работающий проект в системе VB6. Вы его протестировали с пристрастием и произвели трансляцию проекта в исполняемый *.exe файл. Но считать получившийся файл законченным Windows - приложением еще рано! Да, он прекрасно работает на Вашем компьютере и так же здорово работает на машине Вашего друга, у которого вы переписали VB6 (или он у Вас?), но вот на машине Вашей наименее продвинутой в программировании подружки *.exe файл не запускается. То ему .dll подавай, то .ocx, обидно, тем более что и программа составлялась для нее, чтоб восхищалась, а получается наоборот. Ситуация распространенная, но не безвыходная. Ведь у нас теперь есть Package & Deployment Wizard, который поставляется с новой версией пакета Microsoft Visual Basic 6.0 , предназначенный для создания инсталляционных пакетов на основе проекта Visual Basic.
Итак, запускаем: Пуск » Программы » Microsoft Visual Basic 6.0 » Microsoft Visual Basic 6.0 Tools » Package & Deployment Wizard. Или файл Pdcmdln.exe из папки VB98WizardsPDWizard. Далее смело жмите кнопку Browse… и выбирайте из стандартного диалога выбора файла Ваш проект, который должен иметь расширение vbp. При этом выбранный проект должен быть хотя бы раз скомпилирован в .exe файл, и этот файл должен находиться в том же месте, где и сам проект. Затем, жмите кнопку Package, и на остальные запросы можно смело жать Next, можно корректировать работу мастера в соответствии с Вашими потребностями и его возможностями, что и будет Вам предложено на понятном английском языке. Когда кнопка Next станет недоступна, придется нажать на кнопку Finish, мастер недолго поработает, предложит отчитаться Вам о проделанной работе, и если он больше не нужен, то его можно закрыть.
Пришло время посмотреть на плоды его работы. Открываем папку VB98Package , видим там еще одну папку Support - вот они где, многочисленные dll, ocx, которых так не хватает Вашей подружке! Можете смело ей их отправить на компьютер, если знаете, что где должно лежать. А если не знаете? Тогда пойдем другим путем.
Мы создали (при помощи Package & Deployment Wizard) инсталляционный пакет. При чем все файлы программы упакованы в виде - один или несколько (в зависимости от того, был указан предельный размер файла или нет) .cab-файлов плюс файл setup.lst и собственно файла setup.exe, который по идее Microsoft должен после запуска сам установить на компьютер пользователя Вашу программу. И установит, если Вы при запуске Package & Deployment Wizard использовали настройки разделителей даты/времени оригинальные американские, т.е. '/' - для даты, ':' - для времени. Данные настройки задаются в Control Panel/Regional Settings (Панель управления/Язык и стандарты).
А если при попытке запуска пользователем setup.exe из созданного Вами дистрибутива, выдается ошибка примерно такого содержания: "Invalid line in setup information file!", тогда вы нормальный Российский пользователь, у которого, как известно, разделителем даты по умолчанию является точка ('.'). При создании дистрибутива Package & Deployment Wizard генерирует текстовый файл setup.lst и сохраняет в нем информацию о дате и времени последней модификации распространяемых файлов. Дата и время сохраняются с учетом текущих системных разделителей. Программа установки setup.exe, запускаемая пользователем, выполняет разбор setup.lst и при этом ожидает, что дата сохранена в американском формате. Если формат даты не совпадает с ожидаемым, то возникает ошибка "Invalid line in setup information file!" и процесс установки Ваших файлов завершается неудачно (бедная Ваша подружка).
Есть несколько способов исправить положение. Один из них описан в файле readmevb.htm, на примере с немецкой версией, но совет применим и к России. Суть его такова - задайте в вышеуказанных настройках разделители даты/времени оригинальные американские т.е. '/' - для даты, ':' - для времени, запустите Package & Deployment Wizard,и после создания дистрибутива верните настройки в исходное положение. Совет хорош для редкого использования, и не для настоящего программиста VB6.
Следующее решение проблемы - файл setup.lst исправить ручками. Т.е. в текстовом редакторе типа Notepad заменить наши (.) на ихние (/) во всех датах. Совет хорош для уже созданных и даже отправленных на машины пользователей инсталляционных пакетов, что бы не переделывать всю работу заново, а исправить всего один файл.
И самый радикальный метод это переписать setup1.exe - именно этот файл и использует setup.lst. Исходные тексты setup1.exe поставляются вместе с Visual Basic и находятся в папке VB98WizardsPDWizardSetup1 Сделайте следующее:
- Запустите Microsoft Visual Basic 6.0 - Откройте проект Setup1.vbp (в папке VB98WizardsPDWizardSetup1 ) - Откройте для редактирования модуль basSetup1 (файл setup1.bas) - Внесите изменения в функцию ParseDateTime()
Вот как она выглядит:
Function ParseDateTime(ByVal strDateTime As String) As Date Dim Var As Variant Var = strDateTime If 0 = VariantChangeTypeEx(VarPtr(Var), VarPtr(Var), &H409, 0, vbDate) Then ParseDateTime = Var Else 'Raise same error as CDate Err.Raise 13 End If End Function
Используемую здесь API функцию VariantChangeTypeEx() надо заменить на функциюCDate, которая используется для приведения строки в тип Date. Перепишите функцию ParseDateTime() в виде:
Function ParseDateTime(ByVal strDateTime As String) As Date ParseDateTime=CDate(strDateTime) End Function
Получилось короче и эффективнее. Теперь заново скомпилируйте проект Setup1.vbp и получившийся Setup1.exe перепишите в папку WizardsPDWizard,заменив старый файл. Все! Можете смело использовать Package & Deployment Wizard для создания дистрибутива на Вашем Российском компьютере.