目前,我无法将参数从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:\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
答案 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 ""[#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 =&#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。 在这之后,一切突然起作用了!