Скопируйте файл из места установки в другое место в wix при установке

Я создал установочный файл msi, который включает несколько файлов в папке «Образец», которые следует скопировать в папку temp. Кто-нибудь подскажет, как это сделать?


person Sukhjeevan    schedule 06.12.2010    source источник


Ответы (2)


Что-то вроде этого:

   <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="MyVendor" Name="MyVendor">
            <Directory Id="INSTALLDIR" Name="MyDir">
                <Component Id="MyFileId" Guid="...G1...">
                    <File Id="MyFileId" Name="MyFile" Source="...blabla...\MyFile" KeyPath="yes" >
                    </File>
                </Component>


     <DirectoryRef Id="TARGETDIR">
            <Component Id="MyFileCopyId" Guid="...G2...">
                <RemoveFile Id="MyFileRemoveId" Name="MyFile" On="install" Directory="MyCopyDir" />
                <CopyFile Id="MyFileCopyId" FileId="MyFileId" DestinationDirectory="MyCopyDir" />
            </Component>


    <Feature Id="MyFeature" ... >
            <ComponentRef Id="MyFileId" />
            <ComponentRef Id="MyFileCopyId" />

Важным элементом Xml является CopyFile. Вам нужно создать новый компонент, который является копией первого (с другими идентификаторами, идентификаторами, ..., конечно). Оба компонента должны быть объявлены в функции.

person Simon Mourier    schedule 06.12.2010
comment
привет, спасибо за ответ, у меня есть некоторые сомнения 1). Каким будет значение Guid. 2). Если я установлю DestinationDirectory =% TEMP%, тогда мой файл будет скопирован во временную папку. 3). Могу ли я установить атрибут Source = myfile для Файловый элемент. - person Sukhjeevan; 06.12.2010
comment
Guid2 — это просто новый гид. Ни к чему не имеет отношения, но нужен для wix/msi. Ваша временная папка будет MyCopyDir в образце. Источник — это, по сути, локальный путь, поэтому вы можете указать все, что хотите, но эта часть уже должна быть настроена в вашем файле wix. Это не связано с копией. - person Simon Mourier; 06.12.2010
comment
Вы имеете в виду, что если я установлю DestinationDirectory=MyCopyDir, то мой файл будет скопирован в папку ~[user]/LOCALS~1\Temp. Мне больше ничего не нужно делать. - person Sukhjeevan; 06.12.2010
comment
Также я хочу скопировать все файлы в папку Sample, поэтому в этом случае будет значение свойства Source элемента File - person Sukhjeevan; 06.12.2010
comment
@Sukhi: вставьте CopyFile в File, и вы никогда не догадаетесь, что вам нужно указать в качестве источника - person Yan Sklyarenko; 06.12.2010
comment
Я не могу этого сделать, потому что в папке Sample есть 100 файлов. Нужно ли устанавливать Source=*.* для копирования всех файлов во временную папку. - person Sukhjeevan; 06.12.2010

Элемент CopyFile — ваш друг. Вы можете вложить его в исходный элемент File несколько раз, в зависимости от того, как много раз вам нужно скопировать его. Поместите правильные папки назначения и позвольте установщику Windows сделать все остальное.

person Yan Sklyarenko    schedule 06.12.2010
comment
Я не могу этого сделать, потому что в папке Sample более 100 файлов. Нужно ли устанавливать Source=*.* для копирования всех файлов во временную папку или что-то в этом роде. - person Sukhjeevan; 06.12.2010
comment
Да, вы можете указать подстановочный знак и скопировать все файлы в папку в место назначения. И это, вероятно, будет довольно элегантно, так как для всей папки требуется один элемент CopyFile. Однако, если вы создадите файл *.wxs для этой папки, вы можете рассмотреть возможность применения XSL-преобразования к выходным данным, чтобы добавить CopyFile к каждому собранному файлу. Но это альтернатива, если предыдущий способ работает для вас, придерживайтесь его :) - person Yan Sklyarenko; 06.12.2010