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=""[#file_configure.bat]"" 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 ""[#file_configure.bat]" "[BATCHPARAMETER]""" />
<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批处理的主要内容,如果未能解决你的问题,请参考以下文章