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

时间:2018-01-29 13:29:25

标签: windows batch-file cmd wix

目前,我无法将参数从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:\temp\hoge\hoge.txt C:\temp\hoge\hoge%date:~-10,4%%date:~-5,2%%date:~-2,2%.txt
echo %1 > C:\temp\hoge\hoge%date:~-10,4%%date:~-5,2%%date:~-2,2%.txt 2>&1
echo off
endlocal
exit /B 0

3 个答案:

答案 0 :(得分:0)

您正在使用错误的&#39;价值&#39;用于自定义操作数据。 (我认为您还打算使用Property="BatchRun",因为这是延迟的自定义操作??)

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

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

如果您要使用延迟自定义操作,请不要在自定义操作中运行bat文件,在自定义操作本身中重写bat文件的行为,因此不需要首先是一个bat文件。

答案 1 :(得分:0)

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

但我终于得到了输出&#34; HAHIHUHEHO&#34;在C:\ temp \ hoge \ hoge {%date%}。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 =&#34; / c&#34;&#34; [#file_configure.bat]&#34;& #34; [BATCHPARAMETER]&#34;&#34;&#34; /&gt;)

setlocal
echo on

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

答案 2 :(得分:-1)

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

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