2014-11-18 2 views
4

Я создал установщик с помощью wix. По умолчанию приложение устанавливается в папку Program Files. Мне нужно создать папку для моего приложения под каталогом c: и установить там мое приложение.Как установить приложение в пользовательскую папку с помощью установщика wix, кроме папки Program Files

<Fragment> 
     <Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="WINDOWSVOLUME" > 
    <Directory Id="INSTALLLOCATION" Name="WIXDemoApp"> 
    </Directory> 
    </Directory> 
</Directory> 

<SetDirectory Id="WINDOWSVOLUME" Value="c"/> 

<Fragment> 
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 

     <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. --> 
     <Component Id="MyApplication.exe"> 
    <File Source="$(var.MyApplication.TargetPath)" Name="MyApp.exe" Id="MYAPPEXE" KeyPath="yes" /> 
      <!-- TODO: Insert files, registry keys, and other resources here. --> 
     </Component> 
    </ComponentGroup> 
</Fragment> 

Я получаю следующее сообщение об ошибке "error LGHT0094: Unresolved reference to symbol 'Directory:INSTALLFOLDER' in section 'Fragment:'".

Update:

<Fragment> 
      <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="WindowsVolume" > 
     <Directory Id="INSTALLLOCATION" Name="WIXDemoApp"> 
     </Directory> 
     </Directory> 
    </Directory> 

    <SetDirectory Id="WindowsVolume" Value="c"/> 
    </Fragment> 

    <Fragment> 
     <ComponentGroup Id="ProductComponents" Directory="INSTALLLOCATION"> 

      <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. --> 
      <Component Id="MyApplication.exe"> 
     <File Source="$(var.MyApplication.TargetPath)" Name="MyApp.exe" Id="MYAPPEXE" KeyPath="yes" /> 
       <!-- TODO: Insert files, registry keys, and other resources here. --> 
      </Component> 
     </ComponentGroup> 
    </Fragment> 

Это дает мне другую ошибку "error LGHT0204: ICE99: The directory name: WindowsVolume is the same as one of the MSI Public Properties and can cause unforeseen side effects. «.Googled и судил this и this исправить this.But не работает для меня, до сих пор я получаю ту же ошибку, как» ошибка LGHT0204: ICE99: имя каталога: WindowsVolume совпадает с одной из открытых свойств MSI и может вызывать непредвиденные побочные эффекты. »Любая идея, в чем проблема.

+0

Планируете ли вы установку без присмотра? –

ответ

4

установщика Windows чувствителен к регистру, так WINDOWSVOLUME не будет работать. Вы можете сделать что-то вроде этого:

<Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLLOCATION" Name="SetupProject1" /> 
    </Directory> 
    </Directory> 

    <SetDirectory Id="INSTALLLOCATION" Value="[WindowsVolume]SetupProject1" /> 
</Fragment> 

Для вашей второй ошибки, вы смешиваете два разных идентификаторов: INSTALLFOLDER и INSTALLLOCATION. Выберите один и используйте его в обоих местах.

+0

Я обновил вопрос. Я получаю эту ошибку «ошибка LGHT0204: ICE99: имя каталога: WindowsVolume совпадает с одной из открытых свойств MSI и может вызывать непредвиденные побочные эффекты». См. Мое «обновление», о котором идет речь. , – Royal

+0

См. Отредактированный ответ. –

2

Я нашел этот совет на kentie.net - Wix Tips & Tricks. используйте WINDOWSVOLUME id.

TARGETDIR и системный раздел

При попытке установить в подкаталоге корня системного диска (например, «C: \ приложение»), он может чувствовать предположить, что в чем-то как

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="INSTALLLOCATION" Name="SetupProject1"> 
    </Directory> 
</Directory> 

TARGETDIR повторно подходит к системному разделу, так как ProgramFilesFolder is всегда задан как ребенок TARGETDIR. Это не тот случай; TARGETDIR - это раздел с самым свободным дисковым пространством. Это может быть даже раздел на внешнем жестком диске. Для того, чтобы установить его истинную систему раздела, используйте ниже подход:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="WINDOWSVOLUME" > 
     <Directory Id="INSTALLLOCATION" Name="SetupProject1"> 
     </Directory> 
    </Directory> 
</Directory> 

<SetDirectory Id="WINDOWSVOLUME" Value="[WindowsVolume]"/> 

SetDirectory элемент требуется, как пытаться использовать WindowsVolume непосредственно приводит к

ошибки LGHT0204: ICE99: имя каталога: WindowsVolume совпадает с одним из общих свойств MSI и может вызывать непредвиденные побочные эффекты. Подписание MSIS

+1

Этот подход работал отлично для меня, и он не показывает ошибку LGHT0204: ошибка ICE99. – Aebsubis

+0

Рад ответить было полезно. –

Смежные вопросы