使用 nant msi 任务创建 msi

发布于 2024-10-20 14:59:00 字数 4489 浏览 1 评论 0原文

我正在尝试为我的应用程序创建一个 msi。

我使用以下命令传递客户端和版本参数:

C:\my client\nant -D:client=abc -D:version=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. 创建包含 \target\appname-version\ 下所有文件和文件夹的 msi
 
<项目名称=“我的客户端”默认=“msi-package”>



<!--************************************************ **********************
  初始化所有需要的变量
****************************************************** **********************-->
<属性名称=“source-core”值=“./src/core”/>
<属性名称=“客户端”值=“客户端”覆盖=“假”/>    
<属性名称=“版本”值=“3.3.9.7.6”覆盖=“假”/>
<属性名称=“client-target”值=“./target/appname-version”/>
<属性名称=“源银行”值=“./src/${client}”/>
<属性名称=“产品名称”值=“应用程序名称”/>   
<属性名称=“ProductVersion”值=“${版本}”/>  
<属性名称=“ProductManufacturer”值=“manufacturer Inc”/>
;


<!--************************************************ **********************
删除“目标”文件夹(如果存在)并创建一个新的空目标文件夹。
****************************************************** **********************-->

<目标名称=“干净”>
  <删除目录=“./target”/>


<目标名称=“准备”取决于=“清洁”>
    
<属性名称=“目标”值=“./目标”/>


<!--************************************************ ******************************************
将文件从 /src/core 和 /src/client 复制到 target/appname-version
****************************************************** ******************************************-->

<目标名称=“copy-core”取决于=“准备”>
  <复制到dir =“$ {client-target}”>
     
        
     
  

<目标名称=“copy-bank”取决于=“copy-core”>
  <复制到dir =“$ {client-target}”覆盖=“true”>
      
          >
          
          
          ;
          
          >
          ;
          
      
  
 

<!--************************************************ ******************************************
                  MSI 部分应该放在本节中
****************************************************** ******************************************-->  

<目标名称=“msi-package”取决于=“copy-bank”>           

<设置环境>
  <变量名=“PATH”路径=“C:\Program Files\NAnt\bin\;%PATH%”/>




<属性>  
  <属性名称=“产品名称”值=“应用程序名称”/> 
  <属性名称=“ProductVersion”值=“${版本}”/>    
  <属性名称=“制造商”值=“mamufacturer Inc.”/>
  <属性名称=“产品代码”值=“{}”/>  
  <属性名称=“UpgradeCode”值=“{}”/>  
  <属性名称=“ALLUSERS”值=“2”/>
  <属性名称=“TARGETDIR”值=“C:\appname-version”/>


<目录>
<目录名称=“C_CLIENT”文件夹名称=“客户端”根=“TARGETDIR”/>
<目录名称=“C_BITMAP”文件夹名称=“位图”根=“TARGETDIR”/>
<目录名称=“C_ICSRUN”文件夹名称=“icsrun552”根=“TARGETDIR”/>
<目录名称=“C_NLS”文件夹名称=“nls”根=“TARGETDIR”/> >
<目录名称=“C_RPTS”文件夹名称=“报告”根=“TARGETDIR”/>
        




I am trying to create an msi for my application.

I pass the client and version parameter using the command:

C:\my client\nant -D:client=abc -D:version=1.0

I get the following error message:

**

[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

**

However, I can manually run the below command successfully:

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

I have installed cabarc.exe, nantcontrib and microsoft platform sdk and have included them in the PATH variable.

Please advise what I am doing wrong here.

Summary of the nant script:

  1. Copy files to \target\appname-version\
  2. create msi containing all files and folders under \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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

凹づ凸ル 2024-10-27 14:59:00

当我运行确切的命令时,它会失败并出现“未知命令”错误,但如果我删除括号,它就能够创建 cab 文件。显然,nant 将括号与参数一起传递。

When I run the exact command, it fails with 'unknown command' error, but if I remove the brackets, its able to create the cab file. Apparently, nant passes the brackets along with the parameters.

你又不是我 2024-10-27 14:59:00

我也有同样的问题。由于某种原因,添加

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

修复了该问题。

您可以在 任务文档页面上检查 元素所需的元素:http://nantcontrib.sourceforge.net/release/0.85/help/tasks/msi.html

另请参阅此处的 msi 任务示例:示例请求:nant-contrib 的任务

I had this same issue. For some reason, adding

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

Fixed the issue.

You can check the required elements for the <components> element on the <msi> task documentation page: http://nantcontrib.sourceforge.net/release/0.85/help/tasks/msi.html

Also see the great example of an msi task here: Sample Request: <msi> task of nant-contrib

凝望流年 2024-10-27 14:59:00

您尝试过使用 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 文件存在。希望这对寻求使用 nant 脚本创建 msi 文件的帮助的人们有所帮助。快乐编码!

Have you tried using devenv.exe? I have used it in my nant script and I was able to create msi for my application. Here is the code snippet for your reference:

<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>

Make sure that solution file (.sln) path is correct and .vdproj file exists. Hopefully, this will help for people looking for some help in creating msi files using nant scripts. Happy coding!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文