Когда я генерирую новые GUID для COM-серверов? (Примеры в Python)

Я новичок в создании COM-серверов и работе с COM из Python, поэтому я хочу уточнить некоторые вещи, для которых я не смог найти явных ответов:

Правильное создание GUID для COM-серверов

Я генерирую:

  1. GUID для моего предполагаемого COM-сервера вручную, скопируйте его и затем используйте # для сервера в? Поэтому, когда я распространяю приложение, другие пользователи будут использовать тот же GUID, который я создал во время разработки.

  2. Новый GUID при каждой инициализации приложения или COM-сервера?

  3. Новый GUID для каждого компьютера, только один раз во время начальной настройки, затем приложение сохранит GUID # и при будущих загрузках извлечет это # ​​из установочного файла пользователя?

Пример сценария 1:

i)  print(pythoncom.CreateGuid())   #in interpreter
ii) _reg_clsid_ = copy  above GUID into your app

Пример сценария 2:

i)_reg_clsid_ = pythoncom.CreateGuid()

Пример сценария 3:

if self.isfile = os.path.isfile(url):
    load_previous_generated_GUID(url)
else:
    #first time running application or setup file is missing
    GUID = pythoncom.CreateGuid()
    save_GUID_to_setup_file(GUID)

Могу ли я использовать GUID для отслеживания версий программ /COM-серверов?

Если приведенный выше сценарий № 1 верен, то: Когда я делаю обновление, я могу проверить старый GUID, чтобы я мог правильно взаимодействовать с ним?

TODO: Как я могу получить GUID COM-сервера из Python и / или VBA?

1 ответ

Решение

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

Мало того, что вы можете использовать CLSID для отслеживания версий, вы должны изменять CLSID всякий раз, когда вы выпускаете новую версию, или вы нарушаете правила идентификации COM; нарушение правил обычно приводит к непонятным режимам сбоев при вызове вашего объекта вне процесса.

Однако, как правило, вы не выставляете CLSID непосредственно в коде, вместо этого вы выставляете PROGID, которые представляют собой удобочитаемые строки со встроенной информацией о версиях, и используете Win32 API CLSIDFromProgID для преобразования между ними. (VBA сделает это за вас; Python может сделать это тоже.)

Другие вопросы по тегам