Wix - установить и запустить скрипт powershell - PullRequest
6 голосов
/ 20 июля 2011

Я знаю, что есть несколько постов по сценариям Wix и PowerShell, но, попробовав решения из этих постов, я все еще не получаю желаемых результатов. Чтобы объяснить мою ситуацию, я создал проект установки Wix, который получит 2 сценария Powershell и файл msu с моего локального компьютера (под управлением Windows 7) и объединит их в файл msi. если я запускаю файл msi на моей тестовой виртуальной машине (под управлением windows server 2008 r2), файлы копируются в указанную директорию. Отлично. Есть недостаток в том, что новый элемент отображается в списке «Установка и удаление программ», но к этому я подойду позже.

(сценарии Powershell установят msu, отредактируют файл конфигурации и запустят службу - отлично работает при запуске вручную)

То, что я пытался сделать после копирования файлов на целевой компьютер, - это запустить один из скопированных сценариев Powershell, но до сих пор я не смог этого добиться.

мой код .wxs выглядит следующим образом (написанный и скомпилированный с использованием TFS 2010)

<?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Product Id="a89cc681-d617-43ea-817e-1db89b941bf2" Name="Test1" Language="1033" Version="1.0.0.0" Manufacturer="Test1" UpgradeCode="d8db2663-2567-4bb8-9023-09988838eb55">
    <Package InstallerVersion="200" Compressed="yes" />

<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

<!-- Set up the directory -->
<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="IISTIERINSTALLATION" Name="IISTierInstallation">
  </Directory>
</Directory>

<!-- Copy the files -->
<DirectoryRef Id="IISTIERINSTALLATION">
    <Component Id ="C2WTS_update_file" Guid="11960C39-12EB-4777-B43F-394ADB352DD3">
      <File Id="C2WTSmsu" Name="Windows6.1-KB974405-x64.msu" Source="C:\PS Scripts\Windows6.1-KB974405-x64.msu" />
    </Component>

    <Component Id ="C2WTSInstallScript" Guid="C85ED4DB-BDC1-4DD1-84FE-41D7463C6365">
      <File Id="C2WTSscript1" Name="C2WTS_service_install.ps1" Source="C:\PS Scripts\C2WTS_service_install.ps1" />
    </Component>

    <Component Id ="C2WTSxmlScript" Guid="AF1F85A7-88F7-4BBA-89D9-6817CFAA74F9">
      <File Id="C2WTSscript2" Name="Edit_c2wts_config.ps1" Source="C:\PS Scripts\Edit_c2wts_config.ps1" />
    </Component>
</DirectoryRef>

    <Feature Id="ProductFeature" Title="Test1" Level="1">
        <ComponentRef Id="C2WTS_update_file" />
  <ComponentRef Id="C2WTSInstallScript" />
  <ComponentRef Id="C2WTSxmlScript" />
        <ComponentGroupRef Id="Product.Generated" />
    </Feature>

<!-- Run custom action to run the powershell script-->
<Property Id="POWERSHELLEXE">
  <RegistrySearch Id="POWERSHELLEXE"
                  Type="raw"
                  Root="HKLM"
                  Key="SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
                  Name="Path" />
</Property>

<SetProperty Id="RunPSscript"
         After="InstallFiles"
         Sequence="execute"
         Value ="&quot;[POWERSHELL.EXE]&quot; -Version 2.0 -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command &quot;&amp; '[#C2WTS_service_install.ps1]' ; exit $$($Error.Count)&quot;" />

<CustomAction Id="RunPSscript"
              BinaryKey="WixCA"
              DllEntry="CAQuietExec"
              Execute="deferred"
              Return="check"
              Impersonate="yes" />

  <Custom Action="RunPSscript" After="InstallFiles">
    <![CDATA[NOT Installed]]>
  </Custom>

</Product>
</Wix>

После добавления пользовательского действия для выполнения сценария powershell при запуске msi ничего не происходит. Файлы не отображаются в их папке, как раньше, и ничего не установлено. Может кто-нибудь сказать мне, где я иду не так? Как уже говорилось, в сети есть несколько решений о подобных проблемах, но ни одно из них не сработало для меня до сих пор

UPDATE

Я попытался установить msi с включенным ведением журнала, и журнал вернул следующие 2 строки:

CAQuietExec64: Ошибка 0x80070057: не удалось получить данные командной строки

CAQuietExec64: Ошибка 0x80070057: не удалось получить командную строку

После поиска в сети исправлений для этого кода ошибки я все еще не нашел ответов, которые могли бы помочь решить проблему. У кого-нибудь есть идеи? Есть эксперты по Wix?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 14 октября 2011

вы, очевидно, получили этот пример с того же сайта, что и я ... вы нашли одну из ошибок, но не другую: -)

В вашем SetProperty Id = "RunPScript" узле вам необходимо изменить [POWERSHELL.EXE] TO [POWERSHELLEXE] в соответствии с тем, как оно есть определено в указанном выше свойстве, где вы извлекаете путь из реестра.

0 голосов
/ 13 сентября 2011

Попробуйте изменить при выполнении SetProperty.

Похоже, элемент SetProperty вызывается после 'InstallFiles', а также настраивается действие Custom для запуска после 'InstallFiles'.Вы можете попробовать изменить элемент SetProperty, чтобы он выполнялся до 'InstallFiles', примерно так:

<SetProperty Id="RunPSscript"
     Before="InstallFiles"
     Sequence="execute"
     Value ="&quot;[POWERSHELL.EXE]&quot; -Version 2.0 -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command &quot;&amp; '[#C2WTS_service_install.ps1]' ; exit $$($Error.Count)&quot;" />

Все остальное выглядит хорошо, хотя у меня обычно есть пользовательское действие, заключенное в элемент InstallExecuteSequence.

<InstallExecuteSequence>
    <Custom Action="RunPSscript" After="InstallFiles"><![CDATA[NOT Installed]]>/Custom>
</InstallExecuteSequence>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...