Обеспечение минимальной версии DLL, на которую ссылается значение реестра - PullRequest
3 голосов
/ 06 января 2012

Наше приложение требует последней версии DLL для правильной работы. Путь к DLL хранится в реестре. Как применить минимальную версию файла в качестве условия запуска в установщике Windows?

Пока у меня есть это:

<Property Id="FileTest">
    <RegistrySearch Id="FileSearch"
                    Key="SOFTWARE\Company\Product"
                    Name="DLLPath"
                    Root="HKLM"
                    Type="file">
        <FileSearch MinVersion="1.2.3.4" />
    </RegistrySearch>
</Property>
<Condition Message="!(loc.ErrorMessage)">Installed OR (FileTest)</Condition>

Но WiX не скомпилирует это:

MainApp.wxs(543) : error CNDL0010 : The FileSearch/@Name attribute was not found; it is required.

Проблема в том, что я не знаю, что вводить для атрибута Name. Я не знаю заранее, как называется DLL, это может быть что угодно! (Вот почему значение реестра там !!)

1 Ответ

3 голосов
/ 06 января 2012

Что произойдет, если вы измените RegistrySearch на это:

<Property Id="FileTest">
    <RegistrySearch Id="FileSearchResult"
                    Key="SOFTWARE\Company\Product"
                    Name="DLLPath"
                    Root="HKLM"
                    Type="file">
        <FileSearch LongName="[FileSearchResult]" 
                    MinVersion="1.2.3.4" />
    </RegistrySearch>
</Property>

Я думаю, что наличие FileSearch в качестве идентификатора и фактического элемента wix вызывает у вас проблемы. Если вы меняете идентификатор на что-то вроде FileSearchResult, а затем ссылаетесь на него в атрибуте Name (или безопаснее, LongName) элемента FileSearch (заключая его в квадратные скобки, []), тогда он должен работать. Я не прикасался к wix около 6 месяцев, поэтому не даю обещаний;)

ПРИМЕЧАНИЕ. Квадратные скобки - это способ, которым Wix UtilExtensions (как видно из в этом примере ) идентифицируют результат RegistrySearch, сохраненный в атрибуте variable. Это может быть не так для доступа к Id, содержащему результат в стандартном wix.

ПРИМЕЧАНИЕ 2. На самом деле вам может понадобиться использовать элемент RegistrySearchRef в качестве родительского для элемента FileSearch. Взгляните на в этом примере (хотя он использует один результат DirectorySearch элемента в другом DirectorySearch). Надеюсь, это может дать вам достаточно для продолжения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...