создание MSI с помощью NANT MSI задачи - PullRequest
1 голос
/ 07 марта 2011

Я пытаюсь создать msi для своего приложения.

Я передаю параметр client и version, используя команду:

C: \ my client \ nant -D:client = abc -D: версия = 1.0

Я получаю следующее сообщение об ошибке:

**

[msi] Building Installer Database 'C:\irx-client\irxclient.msi'.
      [msi] Adding Properties:
      [msi]  ProductName
      [msi]  ProductVersion
      [msi]  Manufacturer
      [msi]  ProductCode
      [msi]  UpgradeCode
      [msi]  ALLUSERS
      [msi]  TARGETDIR
      [msi] Adding Directories:
      [msi]  client
      [msi]  bitmaps
      [msi]  icsrun552
      [msi]  nls
      [msi]  reports
      [msi] Compressing Files...
                 [exec] Starting 'cabarc (-r N C:\my-client\target\myclient.cab *)' in 'C:\Documents and Settings\user123\Local Settings\Temp\tmp12AE.tmp' BUILD FAILED

**

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

C:\my-client\target\cabarc -r -p n myclient.cab *.*

Я установил cabarc.exe, nantcontrib и microsoft platform sdk и включил их в переменную PATH.Я делаю неправильно здесь.

Сводка скрипта nant:

  1. Копирование файлов в \ target \ appname-version \
  2. создание msi, содержащего все файлы и папкив \ target \ appname-version \
    <?xml version="1.0"?>
<project name="my client" default="msi-package">
<!-- import the extra libraries -->
<loadtasks assembly="${path::combine(environment::get-variable('NANT_HOME'),'contrib/bin/NAnt.Contrib.Tasks.dll')}"/>

<!--********************************************************************
  Initialize all the required variables
************************************************************************-->
<property name="source-core" value="./src/core" />
<property name="client" value="client" overwrite="false"/>    
<property name="version" value="3.3.9.7.6" overwrite="false"/>
<property name="client-target" value="./target/appname-version" />
<property name="source-bank" value="./src/${client}"/>
<property name="ProductName" value="appname" />   
<property name="ProductVersion" value="${version}"/>  
<property name="ProductManufacturer" value="manufacturer Inc"/>
<echo message="${client}"/>
<echo message="${version}"/>

<!--********************************************************************
Delete 'target' folder if it exists and create a new empty target folder.
************************************************************************-->

<target name="clean">
  <delete dir="./target" />
</target>

<target name="prepare" depends="clean">
  <mkdir dir="target" />  
<property name="target" value="./target" />
</target>

<!--**************************************************************************************
Copy files from /src/core and /src/client to target/appname-version
****************************************************************************************-->

<target name="copy-core" depends="prepare">
  <copy todir="${client-target}">
     <fileset basedir="${source-core}">
        <include name="**/*.*" />
     </fileset>
  </copy>
</target>
<target name="copy-bank" depends="copy-core">
  <copy todir="${client-target}" overwrite="true">
      <fileset basedir="${source-bank}">
          <include name="**/*.bmp"/>
          <include name="**/*.exe"/>
          <include name="**/*.icx"/>
          <include name="**/*.img"/>
          <include name="**/*.ini"/>
          <include name="**/*.txt"/>
          <include name="**/nls/*.*"/>
          <include name="**/Reports/*.*"/>
      </fileset>
  </copy>
</target> 

<!--**************************************************************************************
                  msi part should go in this section
*****************************************************************************************-->  

<target name="msi-package" depends="copy-bank">           
<!--this section calls the cabarc.exe which has been installed and the PATH environment variable has been edited to include the exe-->
<setenv>
  <variable name="PATH" path="C:\Program Files\NAnt\bin\;%PATH%" />
</setenv>

<msi sourcedir="C:\my-client\target" output="C:\my-client\myclient.msi" verbose="true" debug="true">

<properties>  
  <property name="ProductName" value="appname" /> 
  <property name="ProductVersion" value="${version}"/>    
  <property name="Manufacturer" value="mamufacturer Inc."/>
  <property name="ProductCode" value="{}" />  
  <property name="UpgradeCode" value="{}" />  
  <property name="ALLUSERS" value="2" />
  <property name="TARGETDIR" value="C:\appname-version" />
</properties>

<directories>
<directory name="C_CLIENT" foldername="client" root="TARGETDIR"/>
<directory name="C_BITMAP" foldername="bitmaps" root="TARGETDIR"/>
<directory name="C_ICSRUN" foldername="icsrun552" root="TARGETDIR" />
<directory name="C_NLS" foldername="nls" root="TARGETDIR" />
<directory name="C_RPTS" foldername="reports" root="TARGETDIR" />
</directories>        

</msi>
</target>
</project>

Ответы [ 3 ]

0 голосов
/ 30 марта 2011

У меня была такая же проблема. По какой-то причине добавив

<components>
  <component>
    Your component here
  </component>
</components>

Исправлена ​​проблема.

Вы можете проверить необходимые элементы для элемента <components> на странице документации по задаче <msi>: http://nantcontrib.sourceforge.net/release/0.85/help/tasks/msi.html

Также см. Отличный пример задачи msi здесь: Пример запроса: Задача nant-contrib

0 голосов
/ 21 мая 2012

Вы пробовали использовать devenv.exe? Я использовал его в своем скрипте Nant, и я смог создать MSI для моего приложения. Вот фрагмент кода для вашей справки:

<target name="BuildMsi">
    <echo message="Creating installables (.msi) for MyTestApplication, please wait..."/>    
    <exec program="c:\program files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe">
        <arg value="c:\My app\My_Test_solution.sln"/>
        <arg value="/build"/>
        <arg value="Release|x86" />
        <arg value="/project"/>
        <arg value="c:\My app\setup\My_Test_solution.vdproj"/>
    </exec>
</target>

Убедитесь, что путь к файлу решения (.sln) указан правильно и файл .vdproj существует. Надеюсь, это поможет тем, кто ищет помощь в создании msi-файлов с использованием скриптов nant. Удачного кодирования!

0 голосов
/ 15 марта 2011

Когда я запускаю точную команду, она завершается с ошибкой «неизвестная команда», но если я уберу скобки, она сможет создать файл cab. По-видимому, Нант передает скобки вместе с параметрами.

...