Enum, кажется, соответствует ограничениям, которые вам требуются, и довольно лаконичен.
Вы можете использовать Функциональный API , который сам говорит semantics resemble namedtuple
>>> from enum import Enum
>>> Enum('ConfigOption', 'one two animal vehicle fairytale')
>>> ConfigOption = Enum('ConfigOption', 'one two animal vehicle fairytale')
>>> [c for c in ConfigOption]
[, , , , ]
Это - то, как я сделал это. Я объявил:
<Icon Id="Icon.exe" SourceFile="..\Installer\Graph.ico" />
прежде </Product>
и добавил его как ссылку следующим образом:
<ProgId Id='myApp.exe' Description='Some description' Advertise='yes' Icon='Icon.exe'>
<Extension Id='xyz' ContentType='application/text'>
<Verb Id='open' Sequence='10' Command='Open' Argument='"%1"' />
</Extension>
</ProgId>
ОТ: http://www.tramontana.co.hu/wix/lesson1.php#1.7
Если Ваше приложение обработает свой собственный тип данных файла, то необходимо будет зарегистрировать ассоциацию файлов для него. Поместите ProgId в своем компоненте. FileId должен обратиться к идентификационному атрибуту элемента Файла, описывающего файл, предназначенный для обработки файлов этого расширения. Отметьте восклицательный знак: это возвратит короткий тракт файла вместо длинного:
<ProgId Id='AcmeFoobar.xyzfile' Description='Acme Foobar data file'>
<Extension Id='xyz' ContentType='application/xyz'>
<Verb Id='open' Sequence='10' Command='Open' Target='[!FileId]' Argument='"%1"' />
</Extension>
</ProgId>
Для присвоения значка этому типу файла необходимо указать соответствующие ключи реестра сами в компоненте:
<Registry Id='FooIcon1' Root='HKCR' Key='.xyz' Action='write'
Type='string' Value='AcmeFoobar.xyzfile' />
<Registry Id='FooIcon2' Root='HKCR' Key='AcmeFoobar.xyzfile' Action='write'
Type='string' Value='Acme Foobar data file' />
<Registry Id='FooIcon3' Root='HKCR' Key='AcmeFoobar.xyzfile\DefaultIcon' Action='write'
Type='string' Value='[INSTALLDIR]Foobar.exe,1' />