Wix условно установить компонент, если ключ реестра существует - PullRequest
2 голосов
/ 04 марта 2010

У меня есть компонент, который мне нужно установить, только если существует раздел реестра, что означает, что приложение установлено.

Мне нужно присвоить значение ключа реестра (это каталог) свойству, а затем использовать это свойство для копирования файлов из.

У меня пока есть следующий скрипт, но появляется сообщение об ошибке «Системе не удается найти файл '[MYTESTDIR] fileToCopy.dat'."

Любая помощь будет принята с благодарностью.

<Property Id="MYTESTDIR">
    <RegistrySearch Id="NetFramework20"
            Root="HKLM"
            Key="SOFTWARE\TEST\VALUE\1.00"
            Name="MyName"
            Type="directory" />
</Property>

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFilesFolder">
        <Directory Id="TEST" Name="Test">       
            <Component Id="MyComponent" Guid="E5FF53DE-1739-42c4-BE37-60F810C9CD69">
              <Condition>MYTESTDIR</Condition>
              <File Id="fileToCopy.dat" Name="fileToCopy.dat" Source="[MYTESTDIR]fileToCopy.dat">
                  <CopyFile Id="fileToCopy.datCopy" DestinationProperty="WEBSERVICEBINFOLDER" />
              </File>

        </Directory>            
    </Directory>
</Directory>

<Feature Id="MyFeature" Title="MyFeature" Level="1">
    <ComponentRef Id="MyComponent" />
</Feature>

Ответы [ 2 ]

5 голосов
/ 05 марта 2010

На основании моего прочтения документации по схеме Wix ваша проблема заключается в том, что у вас есть элемент CopyFile , вложенный в элемент File. Откажитесь от элемента File и просто поместите CopyFile под Component:

<Component Id="MyComponent" Guid="E5FF53DE-1739-42c4-BE37-60F810C9CD69"> 
  <Condition>MYTESTDIR</Condition> 
  <CopyFile Id="fileToCopy.datCopy" SourceName="[MYTESTDIR]fileToCopy.dat" DestinationProperty="WEBSERVICEBINFOLDER" />
</Component>

В том виде, в каком он был у вас, вложенный в Файл, Wix искал файл в вашей системе во время сборки, а не настраивал команду копирования для запуска во время установки.

1 голос
/ 05 марта 2010

MYTESTDIR - это свойство установщика Windows, которое получает значение в целевой системе при установке пакета .

Однако вы пытаетесь использовать это свойство в атрибуте Source, который используется для указания на файлы в системе , в которых находится пакет установки .

Очевидно, что это не сработает. Свойства установщика Windows даже не существуют, пока оценивается атрибут Source, поэтому Source определенно не может поддерживать такое использование.

Ответ Брайана - правильное решение для того, что вы пытаетесь сделать здесь. Использование CopyFile в элементе File не является незаконным, но оно предназначено для копирования файлов, которые вы также устанавливаете. В этом случае вы хотите скопировать файл, который уже находится в целевой системе, поэтому элемент File не подходит.

...