Wix:我无法将参数从CAQuietExec传递到cmd.exe批处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wix:我无法将参数从CAQuietExec传递到cmd.exe批处理相关的知识,希望对你有一定的参考价值。

目前,我无法将参数从CAQuiteExec传递到cmd.exe批处理。 (灵感来自wix, install files and run bat file

在延迟序列中,安装程序可以调用命令行命令“copy”和“echo”,但参数%1始终为空白...

我想将属性“BATCHPARAMETER”的Value =“HAHIHUHEHO”传递给configure.bat。但ECHO返回自己的状态“ON”(仅与ECHO相同,没有任何输入参数....)

有任何想法吗?

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="MY-UID" Name="my_name" Language="1033" Version="1.11.5164" Manufacturer="company" UpgradeCode="MY-UID">
        <Package Description="Test file in a Product" Comments="Simple test" InstallerVersion="200" Compressed="yes" />
        <Media Id="1" Cabinet="simple.cab" EmbedCab="yes" />
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder" Name="PFiles">
                <Directory Name="my_folder" Id="MY_FOLDER">
                  <Component Id="CONFIGURE.BAT" DiskId="1" Guid="MY-UID">
                         <File KeyPath="yes" Id="file_configure.bat" Name="configure.bat" Source="configure.bat" />
                  </Component>  
                </Directory>
            </Directory>
        </Directory>
        <Feature Id="MainFeature" Title="Main Feature" Level="1">
                   <ComponentRef Id="CONFIGURE.BAT" />
        </Feature>
        <UI />
        <UIRef Id="WixUI_Minimal" />

        <Property Id="BATCHPARAMETER" Value="HAHIHUHEHO" Secure="yes" />
        <CustomAction Id="SetCustomActionData" Return="check" Property="BatchCmd" Value="[BATCHPARAMETER]" />

        <CustomAction Id="BatchCmd" Property="BatchRun" Value="&quot;[#file_configure.bat]&quot;" Execute="immediate">
        </CustomAction>

        <CustomAction Id="BatchRun" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="yes">
        </CustomAction>
        <InstallExecuteSequence>
            <Custom Action="SetCustomActionData" Before="BatchCmd"></Custom>

            <Custom Action="BatchCmd" Before="BatchRun">NOT Installed</Custom>

            <Custom Action="BatchRun" After="InstallFiles">NOT Installed</Custom>
        </InstallExecuteSequence>  
    </Product>
</Wix>

configure.bat内容如下:它将hoge.txt复制到hoge {%date%without slash} .txt并在其中写入%1参数。

setlocal
echo on

copy /Y C:	emphogehoge.txt C:	emphogehoge%date:~-10,4%%date:~-5,2%%date:~-2,2%.txt
echo %1 > C:	emphogehoge%date:~-10,4%%date:~-5,2%%date:~-2,2%.txt 2>&1
echo off
endlocal
exit /B 0
答案

您对自定义操作数据使用了错误的“值”。 (我想你也打算使用Property="BatchRun",因为这是延迟的自定义动作??)

<CustomAction 
  Id="SetCustomActionData" 
  Return="check" 
  Property="BatchRun" 
  Value="BATCHPARAMETER=[BATCHPARAMETER]" />

请查看this答案,以获得更深入的自定义操作数据示例。您还可以通过使用;分隔属性,在一个自定义操作中执行多个属性值。

如果您要使用延迟自定义操作,请不要只在自定义操作中运行bat文件,在自定义操作本身中重写bat文件的行为,这样就不需要首先使用bat文件。

另一答案

这是自我回复而不是确切答案,

但我终于在C: temp hoge hoge {%date%}输出“HAHIHUHEHO”.txt(Not Quiet Exec,谢谢@Brian Sutherland!):

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="my-uid" Name="my_name" Language="1033" Version="1.11.5164" Manufacturer="company" UpgradeCode="my-uid">
        <Package Description="Test file in a Product" Comments="Simple test" InstallerVersion="200" Compressed="yes" />
        <Media Id="1" Cabinet="simple.cab" EmbedCab="yes" />
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder" Name="PFiles">
                <Directory Name="my_folder" Id="MY_FOLDER">
                  <Component Id="CONFIGURE.BAT" DiskId="1" Guid="my-uid">
                         <File KeyPath="yes" Id="file_configure.bat" Name="configure.bat" Source="configure.bat" />
                  </Component>  
                </Directory>
            </Directory>
        </Directory>
        <Feature Id="MainFeature" Title="Main Feature" Level="1">
                   <ComponentRef Id="CONFIGURE.BAT" />
        </Feature>
        <UI />
        <UIRef Id="WixUI_Minimal" />
        <Property Id="CMD">
          <DirectorySearch Id="CmdFolder"  Path="[SystemFolder]" Depth="1">
            <FileSearch Id="CmdExe" Name="cmd.exe"  />
          </DirectorySearch>
        </Property>
        <Property Id="BATCHPARAMETER" Value="HAHIHUHEHO" Secure="yes" />
        <CustomAction Id="SetCustomActionData" Return="check" Property="BatchRun" Value="BATCHPARAMETER=[BATCHPARAMETER]" />
        <CustomAction Id="BatchRun" Property="CMD" Execute="deferred" Return="check" Impersonate="yes" ExeCommand="/c &quot;&quot;[#file_configure.bat]&quot; &quot;[BATCHPARAMETER]&quot;&quot;" />
        <InstallExecuteSequence>
            <Custom Action="SetCustomActionData" Before="BatchRun"></Custom>
            <Custom Action="BatchRun" After="InstallFiles">NOT Installed</Custom>
        </InstallExecuteSequence>  
    </Product>
</Wix>

configure.bat

我无法通过嵌入式语法直接找到QuietExec中批处理文件的方式...(如ExeCommand =“/ c”“[#file_configure.bat]”“[BATCHPARAMETER]”“”/>)

setlocal
echo on

copy /Y C:	emphogehoge.txt C:	emphogehoge%date:~-10,4%%date:~-5,2%%date:~-2,2%.txt
echo %1 > C:	emphogehoge%date:~-10,4%%date:~-5,2%%date:~-2,2%.txt 2>&1
echo off
endlocal
exit /B 0
另一答案

我有一个非常类似的问题,从WIX运行BAT文件,作为EXE包。在某些计算机上,整个过程失败错误是错误0x80070001:进程返回错误:0x1错误0x80070001:无法执行EXE包。错误0x80070001:无法配置每台计算机的EXE程序包。

解决方法是从BAT文件末尾的exit命令中删除/ b。在此之后,一切都突然起作用!

以上是关于Wix:我无法将参数从CAQuietExec传递到cmd.exe批处理的主要内容,如果未能解决你的问题,请参考以下文章

将参数从bootstrapper传递到msi bundle包

Wix刻录安装程序无法在静默安装时重新启动

参数未传递给 WiX 中的延迟自定义操作

无法将参数从 html 传递到视图函数

无法将参数从模板传递到 Django 视图

NoReverseMatch:无法将参数从模板传递到视图。