Package & Deployment Wizard. Прикра помилка, Basic, Програмування, статті


З новою версією пакета Microsoft Visual Basic 6.0 поставляється Package & Deployment Wizard, призначений для створення інсталяційних пакетів на основі проекту Visual Basic. У порівнянні зі своїм добре відомим попередником – Setup Wizard, P & D Wizard надає нову функціональність, але, на жаль, новий інструмент містить деякі прикрі помилки.

Проблеми використання:

Отже, Ви вирішили створити за допомогою P & D Wizard інсталяційний пакет типу “Standart Setup Package “. Wizard відпрацював відмінно і згенерував дистрибутив (setup.exe, setup.lst і один / декілька. cab-файлів), але при спробі запуску користувачем setup.exe з створеного Вами дистрибутива, видається помилка “Invalid line in setup information file! “;. Якщо Ви стикалися з подібною ситуацією, то, швидше за все, справа в наступному. Hа Вашому комп’ютері (там, де запускався P & D Wizard) настройки роздільників дати / часу відрізняються від оригінальних американських (‘/’ – для дати, ‘:’ – для часу). Нагадати, що дані настройки задаються в Control Panel / Regional Settings (Панель управління / Мова і стандарти).

Оскільки для Росії роздільником дати за умовчанням є точка (‘.’), описана проблема виявляється досить швидко. Причина виникнення помилки проста. При створенні дистрибутива P & D Wizard генерує текстовий файл setup.lst і зберігає в ньому інформацію про дату і час останньої модифікації поширюваних файлів. Дата і час зберігаються з урахуванням поточних системних роздільників. Програма установки setup.exe, запускається користувачем, виконує розбір setup.lst і при цьому очікує, що дата збережена в американському форматі. Якщо формат дати не збігається з очікуваним, то виникає помилка “Invalid line in setup information file!” і процес установки завершується невдало.

Варіанти рішення:

Для вирішення зазначеної проблеми можна запропонувати кілька варіантів: Перед запуском P & D Wizard змінити системні налаштування (роздільники) таким чином, щоб Short date style мав вигляд “mm / dd / yy” або “mm / dd / yyyy”; запустити P & D Wizard для генерації дистрибутива; відновити настройки в Regional Settings. Цей спосіб рекомендований Microsoft і описаний в readme для VB (файл “[Program Files] \ Microsoft Visual Studio \ readmevb.htm “) в розділі” Package and Deployment Wizard: Bad Date and Time Formats “Після роботи P & D Wizard відредагувати файл setup.lst вручну, замінивши при цьому дати, які мають формат, не сприйманий програмою setup1.exe, на потрібного (“mm / dd / yy” або “mm / dd / yyyy”) Модифікувати вихідний текст програми setup1.exe, перекомпілювати та підмінити існуючу версію на нову.

Зупинимося на цьому варіанті детальніше. Модифікація Setup1.exe Модуль setup1.exe входить до складу дистрибутива, генерується P & D Wizard, і виконує процедуру установки програми на клієнтську машину відповідно до сценарієм, описаним в setup.lst. Вихідні тексти setup1.exe поставляються разом з Visual Basic і знаходяться в папці “[Program Files] \ Microsoft Visual Studio \ VB98 \ Wizards \ PDWizard \ Setup1 \”. Для внесення змін зробимо наступні дії:

1.C допомогою Microsoft Visual Basic відкриємо проект [Program Files] \ Microsoft Visual Studio \ VB98 \ Wizards \ PDWizard \ Setup1 \ Setup1.vbp

2.Откроем для редагування модуль basSetup1 (файл setup1.bas)

3.Внесем зміни у функцію ParseDateTime () Оригінальна функція 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

Функція ParseDateTime () виробляє переклад дати з рядка в тип Date допомогою виклику функції API VariantChangeTypeEx (). В даному випадку, VariantChangeTypeEx робить спробу привести Variant-змінну до типу Date без урахування установок в Regional Settings, і, відповідно, вимагає жорсткого дотримання формату записи дати у файлі setup.lst (“mm / dd / yy” або “mm / dd / yyyy”). Оскільки P & D Wizard не дотримується цього правила, функція VariantChangeTypeEx () не завжди відпрацьовує успішно.

Використовуємо для перетворення рядка в дату функцію СDate. Ця функція працює більш гнучко і дозволяє використати як аргумент рядок з різними видами роздільників (крапка, кома, ‘/’). Наведемо функцію ParseDateTime () до увазі:

Function ParseDateTime(ByVal strDateTime As String) As Date

   
ParseDateTime=CDate(strDateTime)

End Function

4.Скомпіліруем проект (File \ Make Setup1.exe …) для створення нового модуля setup1.exe. 5.Перенесем новий setup1.exe папку “… \ Wizards \ PDWizard \” (саме звідси він береться P & D Wizard’ом при створення дистрибутива). Тепер можна використати P & D Wizard для створення дистрибутива на комп’ютері з роздільниками дати / часу встановлюваними за замовчуванням для Росії.

Висновок

Запропонований варіант вирішення проблеми не дає стовідсоткової гарантії того, що програма інсталяції буде коректно обробляти файл setup.lst на будь-якій машині клієнта (при створенні дистрибутива як роздільник може бути зазначений практично будь символ, наприклад, ‘?’). Hо ймовірність того, що роздільник відрізняється від ‘/’ або точки дуже мала, а функція CDate веде себе достатньо інтелектуально і розпізнає практично будь-який розумний формат дати. Для повного усунення помилки необхідно виправити код P & D Wizard, а зробити це може тільки Microsoft.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*