This page was last modified 11:29, 5 May 2008.
Смена UID3
From Forum Nokia Wiki
Contents |
Что такое UID3?
UID3 (уникальный идентификатор 3) - это UID специального назначения, 32х разрядное число для однозначной идентификации бинарного файла (EXE или DLL) в системе, а также для разграничения доступа между процессами. UID3 задается в mmp-файле проекта.
Очень важно правильно выбрать UID3, для этого желательно ознакомиться со статьей UID - Часто задаваемые вопросы. На этапе разработки, чаще всего, выбираются значения диапазона от 0x00000000 и до 0x0FFFFFFF.
Для чего менять UID3?
На различных этапах разработки приложения могут использоваться различные UID3. К примеру разработав приложение для Symbian 3-й редакции с использованием UID3 из области значений для разработки, вам потребуется подписать его перед распространением. В этом случае вы должны будете получить новый UID3 из защищенной области значений. Также необходимость изменения UID3 может возникнуть при портировании приложения с Symbain второй редакции на Symbain третьей редакции.
Как изменить UID3?
Современные IDE (Carbide.c++ 1.3, Carbide.vs 3.0) позволяют задать UID3 в момент генерации нового проекта. К сожалению, не все позволяют изменить его после этого. Точнее, они могут изменить его не везде, а лишь в части файлов, что повлечет ошибки при установке и запуске приложения. Поэтому самый верный способ изменить UID3 - сделать это вручную во всех необходимых файлах. Делается это либо вне IDE с помощью текстового редактора. Либо редактором файлов самой IDE.
Carbide.c++ 1.2. Мастер создания нового проекта. Задание UID3.
Carbide.c++ 1.2. Редактор mmp файла. Задание UID3.
Где храниться UID3
UID3 храниться в нескольких файлах проекта. Число и расположение таких файлов зависит от используемой IDE и типа проекта. Следует отметить, что наиболее безопасный и универсальный способ найти все значения UID3 - воспользоваться поиском по файлам проекта. Но для более глубокого понимания необходимости изменений этих файлов, и к чему эти изменения ведут ниже приведен список. К тому же, не все что вы найдете следует изменять (см. Примечание). Файлы, содержащие UID3, перечисляются в порядке вероятности их присутствия в вашем проекте:
1) Файл .mpp. Обычно расположен в папке .\Group\ проекта и содержит основные характеристики mmp файла. Файл .mmp обычно редактируется специальным редактором IDE. Например в Carbide.c++ 1.2 вы обнаружите его на закладке Overview. Вы также можете открыть его любым текстовым редактором, или в закладке myproject.mmp визуального редактора. UID3 в mmp файле задается вместе с UID2 после ключевого слова UID. Пример:
Измените второе число на новое значение UID3 и сохраните файл.
2) Если вы создаете программу для Symbian 3-й редакции, то в pkg файле вы можете увидеть использование UID3 в качестве папки. Файл pkg обычно расположен в директории ./sis/ проекта. Пример:
Это значит, что файл будет сохранен в защищенное хранилище, связанное с программой (см. Data caging (Экранирование данных)). На самом деле, для получения папки экранированного хранилища система будет использовать SID программы, но его редко задают в mmp файле, а по умолчанию он равен UID3. Поэтому, в 90% случаев вам следует скорректировать пути инсталляции этих файлов. Иначе, при установке вы увидите сообщение об ошибке.
3) Файл MyApp_reg.rss. Содержит информацию для регистрации GUI приложения в системе (информация о иконке приложения в главном меню и ее видимости). В нем вы найдете строку UID3 0x2000DED8. Если забудете изменить это значение UID3, ваша программа перестанет открываться при выборе ее иконки в главном меню.
4) Файл MyAppAppliсtion.h (или MyAppGlobals.h в UIQ проекте). Содержит значение константы, возвращаемой функцией TUid CAknApplication::AppDllUid() (в UIQ - TUid CQikApplication::AppDllUid()). В заголовочном файле вы увидите строку
Обязательно поменяете это значение UID3 - иначе ваша программа перестанет запускаться. Система получит UID3 из вышеназванной функции и сравнит его с UID3 из файла MyApp_reg.rss. Если они не совпадут, система не станет вызывать функцию NewApplication(), и ваша программа просто не запустится.
Некоторые IDE изменяют это значение автоматически при изменении значения UID3 в файле mmp. Для этого нужно перекомпилировать проект.
Если вы не можете найти эту константу, посмотрите что возвращает функция AppDllUid(), возможно значение указано в самой функции.
5) Файл application.uidesign. Этот файл присутствует в GUI проекте, если он был создан по шаблону GUI Application with UI Designer. Изменить его с помощью встроенного визуального редактора не получится, файл придется открывать текстовым редактором. В нем вы найдете строки:
- <property id="className">CVMSApplication</property>
- <property id="documentBase">VMS</property>
- <property id="name">VMSApplication</property>
- <property id="uid">0x2000DED8</property>
Измените значение UID3. В идеале, это значение также должно изменяться IDE, при смене UID3 в mmp файле. Но на практике, так происходит не всегда. Просто знайте, что в этом файле также есть UID3.
6) Наконец, UID3 может присутствовать в вашем коде, если вы используете TApaTaskList или иной способ поиска запущенных в памяти процессов. Например, для того чтобы запретить повторный запуск вашего фонового процесса. В этом случае следует воспользоваться поиском старого UID3 во всех файлах проекта.
Примечания:
a) Зачастую, UID3 путают с Package ID. Package ID задается в pkg файла строкой вида:
Эта путаница вызвана тем, что после генерации нового проекта Carbide выбирает значение UID3 в качестве Package ID по-умолчанию. Изменения этого числа не обязательно, и даже может повредить, в том случае если вы используете в pkg файле механизм определения уже установленных пакетов по Package ID.
b) Для проектов, использующих автозапуск программы с помощью Startup List Management API (S60 3rd), создается rss файл, именем которого часто является Package ID (в проекте pid.rss, после установки c:\private\101f875a\import\[pid].rsc). Т.к. Package ID часто путают с UID3, то его стараются переименовать. На самом деле это не обязательно. Если же вы все же хотите переименовать этот файл, убедитесь что вы также изменили ссылку на него в файле mmp и pkg, а также, что его новое имя совпадает с Package ID.
После изменения UID3 требуется перекомпиляция проекта.
Внутренние ссылки
| Related Discussions | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Не появляется икона в телефоне | Sergey_m | Russian Developer Forum - Форум Российских разработчиков | 5 | 2008-03-10 13:39 |
| Recognizer Problem | saji_iq | General Symbian C++ | 3 | 2006-11-01 15:39 |
| widget.openApplication API | meetashish | General Discussion | 2 | 2008-04-11 21:20 |
| 请教,编译错误 | DemiDI | Symbian | 4 | 2008-09-24 06:44 |
| Build Carbide.c++ Project with Command Line | mopius | Carbide.c++ and CodeWarrior Tools | 6 | 2007-02-01 12:16 |
