WiX: Как я могу установить свойство внешне? - PullRequest
9 голосов
/ 02 марта 2010

В моем установщике WiX у меня есть свойство для идентификатора пользователя, которое записывается в раздел реестра:

<Property Id='UserID' Value='123' />

<Directory Id='TARGETDIR' Name='SourceDir'>
    <Component Id='UserIDComponent' Guid='*'>
        <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' 
                       Type='integer' Value='[UserID]' Name='UserID' />
    </Component>

Я бы хотел установить значение этого свойства в качестве идентификатора пользователя, загружающего мой установщик на лету. Поэтому, когда они пойдут на скачивание, я просто создам копию базового MSI, которую получают все, устанавливаю значение UserID для человека, загружающего файл, и это то, что они загружают. Это будет тот же установочный пакет, который получают все, но с настраиваемым для них свойством.

Я не могу найти какие-либо ресурсы о том, как установить свойство WiX MSI из внешнего источника. Как я могу это сделать?

Ответы [ 2 ]

9 голосов
/ 02 марта 2010

Насколько я помню, вы действительно можете устанавливать свойства "извне" - имя свойства должно быть во всех UPPERCASE, чтобы быть признанным как публичное свойство (не спрашивайте меня, почему ....) Вы можете установить его так:

msiexec /i C:\Example.msi PROPERTY=VALUE

например. в вашем случае

msiexec /i C:\Example.msi USERID=somevalue

См. Документы MSDN об использовании параметров командной строки с MSIEXEC

.
1 голос
/ 02 марта 2010

Ваши параметры: -

(i) параметры командной строки в msiexec согласно другому ответу - хрупкие, на самом деле не вариант, если они загружают и запускают его

(ii) попытка взломать MSI-файл для вставки идентификатора - взлом

(iii) запустить MSBUILD для создания нового файла MSI по требованию на сервере после изменения копии файла WIX для включения их идентификатора

(iv) предварительно сгенерируйте множество файлов MSI со случайными идентификаторами (возможно, GUID) в них, а затем свяжите эти идентификаторы с идентификаторами пользователей во время загрузки в базу данных. Теперь предоставьте службу поиска для сопоставления случайного идентификатора в MSI-файле с реальным идентификатором пользователя, чтобы программа при запуске могла найти идентификатор пользователя (или иметь настраиваемое действие, которое делает это).

(v) создайте пользовательское действие и используйте MsiGetProperty, чтобы получить имя файла установщика - просто добавьте userID к имени файла MSI - хрупкий взлом

...