2016-01-21 5 views
4

У меня есть установка wix ниже.Вывод командной строки Wix из .tar.gz

 <?xml version="1.0" encoding="UTF-8"?> 
     <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
      <Product Id="*" Name="SomeApplication" Language="1033" Version="1.0.0.0" Manufacturer="Company" UpgradeCode="4810b5e4-21d8-4a45-b289-eafb10dddc0a"> 
      <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 

      <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
      <Media Id="1" Cabinet="Cab1.cab" EmbedCab="yes" /> 

      <Feature Id="ProductFeature" Title="EvokoInstaller" Level="1"> 
       <ComponentGroupRef Id="ProductComponents" /> 
      </Feature> 

      <UIRef Id="WixUI_InstallDir" /> 
      <WixVariable Id="WixUILicenseRtf" Value="LICENSE.rtf" /> 

      <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" /> 

      <InstallExecuteSequence> 
       <Custom Action="ExtractService" Before="InstallFinalize">NOT Installed</Custom> 
      </InstallExecuteSequence> 
      <CustomAction Id="ExtractService" Directory="INSTALLFOLDER" Execute="deferred" ExeCommand="7z e some_service.tar.gz && 7z x some_service.tar" Return="check"/> 

      </Product> 

      <Fragment> 
      <Directory Id="TARGETDIR" Name="SourceDir"> 
       <Directory Id="ProgramFilesFolder"> 
       <Directory Id="INSTALLFOLDER" Name="SomeInstaller"/> 
       </Directory> 
      </Directory> 
      </Fragment> 

      <Fragment> 
      <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 
       <Component Id="packages"> 
       <File Source="some_service.tar.gz" /> 
       </Component> 
      </ComponentGroup> 
      </Fragment> 
    </Wix> 

Теперь он копирует файл some_service.tar.gz в каталог установки. Я хотел бы извлечь файл после его копирования. Я бы хотел, чтобы это было сделано автоматически Wix.

Команда 7z e some_service.tar.gz && 7z x some_service.tar делает это точно, когда я делаю это вручную и командная строка запускается как aministrator.

Как я могу выполнить его из Wix и удалять сжатые файлы, как только она извлекается.

EDIT1:

После @ комментарий ArkadySitnitsky, я есть добавить предложенный код, и теперь я не могу скопировать some_service.tar.gz файл установки назначения.

Пожалуйста, проверьте изображение:

enter image description here

edit2:

Вот лог с регистратора событий после установки купирован с ошибкой.

Product: SomeProduct -- Error 1722. There is a problem with this Windows >Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor. Action ExtractService, location: C:\Program Files (x86)\SomeInstaller\, command: 7z e some_service.tar.gz

EDIT3:

Когда я добавить паузу в конце команды , как это: ExeCommand="7z e some_service.tar.gz pause" я снова смог установить его. Он копирует .tar.gz и оставляет его как есть.

EDIT4:

Что касается Сжатый удаления файлов после удаления делается я пробовал:

<CustomAction Id="ExtractService3" 
       Directory="INSTALLFOLDER" 
       Impersonate='no' 
       Execute="deferred" 
       ExeCommand="rm liso_service.tar.gz" 
       Return="check"/> 

<CustomAction Id="ExtractService4" 
       Directory="INSTALLFOLDER" 
       Impersonate='no' 
       Execute="deferred" 
       ExeCommand="rm liso_service.tar" 
       Return="check"/> 

и

<Custom Action="ExtractService3" After="ExtractService2">NOT Deleted</Custom> 
    <Custom Action="ExtractService4" After="ExtractService2">NOT Deleted</Custom> 

Но опять-таки приводит к ивовый прут то же Worning всплывающее окно. Не могли бы вы посоветовать это.

EDIT5:

<Custom Action="ExtractService3" After="ExtractService2"></Custom> 
    <Custom Action="ExtractService4" After="ExtractService2"></Custom> 

все тот же результат

EDIT6:

rm команда не работает, когда я попробовал вручную и она сообщила об ошибке:

cygintl-2.dll is missing from your computer

I прочитали на другом посту, что это из-за OpenSHH не правильно установлен. Я не должен иметь OpenSHH как зависимость, поэтому я удалил его. После этого команда rm была непризнанной. Таким образом, я попробовал команду del (вручную). Он работает, но только командная строка запускается как администратор.

EDIT7:

ExeCommand="del /f /q some_service.tar.gz" результатов с тем же всплывающим окном.Но в папке установки есть только some_service.tar кажется, что some_service.tar.gz удален. При попытке вручную удалить del /f /q some_service.tar он говорит

Access is denied.

EDIT8:

Я уже пытаюсь удалить оба файла .tar и tar.gz. Смотрите ниже, пожалуйста:

<CustomAction Id="ExtractService" 
       Directory="INSTALLFOLDER" 
       Impersonate='no' 
       Execute="deferred" 
       ExeCommand="7z e -y some_service.tar.gz" 
       Return="check"/> 

<CustomAction Id="ExtractService2" 
       Directory="INSTALLFOLDER" 
       Impersonate='no' 
       Execute="deferred" 
       ExeCommand="7z x -y some_service.tar" 
       Return="check"/> 

<CustomAction Id="ExtractService3" 
       Directory="INSTALLFOLDER" 
       Impersonate='no' 
       Execute="deferred" 
       ExeCommand="del /f /q some_service.tar.gz" 
       Return="check"/> 

<CustomAction Id="ExtractService4" 
       Directory="INSTALLFOLDER" 
       Impersonate='no' 
       Execute="deferred" 
       ExeCommand="del /f /q some_service.tar" 
       Return="check"/> 

<InstallExecuteSequence> 
    <Custom Action="ExtractService" Before="InstallFinalize">NOT Installed</Custom> 
    <Custom Action="ExtractService2" After="ExtractService">NOT Installed</Custom> 
    <Custom Action="ExtractService3" After="ExtractService2" ></Custom> 
    <Custom Action="ExtractService4" After="ExtractService2" ></Custom> 
</InstallExecuteSequence> 
+0

Вы пробовали запустить пользовательское действие с Execute = «отложены»? –

+0

@ArkadySitnitsky Я только что попробовал, и то же самое происходит. Ничего. – eomeroff

+0

Ваш заказ действие не планируется, попробуйте добавить: не установлен

ответ

1

Я побежал код, и вы должны использовать пользовательское действие, как это:

<CustomAction Id="ExtractService" 
       Directory="INSTALLFOLDER" 
       Impersonate='no' 
       Execute="deferred" 
       ExeCommand="&quot;[INSTALLFOLDER]7za.exe&quot; e -y cheeseburger.7z" 
       Return="check"/> 

<CustomAction Id="ExtractService2" 
       Directory="INSTALLFOLDER" 
       Impersonate='no' 
       Execute="deferred" 
       ExeCommand="&quot;[INSTALLFOLDER]7za.exe&quot; x -y cheeseburger.7z" 
       Return="check"/> 

копия этого пользовательские действия и и установите команду еха по мере необходимости.

Также сделайте индивидуальное действие для каждой операции, не используйте & &. Просто скопируйте пользовательское действие выше, укажите другое имя и добавьте его в последовательность.

 <InstallExecuteSequence> 
      <Custom Action="ExtractService" Before="InstallFinalize">NOT Installed</Custom> 
      <Custom Action="ExtractService2" After="ExtractService">NOT Installed</Custom> 
     </InstallExecuteSequence> 

Надеется, что это помогло

+0

Пожалуйста, проверьте мое последнее изменение относительно удаления сжатого файла. – eomeroff

+0

Вам необходимо удалить условие «NOT deleted». –

+0

Проверьте, не работает ли ручное удаление, если не проверять журнал. также вы можете открыть msi с помощью orca и проверить таблицу действий ... –

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