如何在安装期间在installscript中执行以下命令?
netsh.exe advfirewall firewall show rule name="PowerSI (Release ASI 16.64)" || NETSH.EXE advfirewall firewall add rule name="PowerSI (Release ASI 16.64)" dir=in action=allow program="d:\Cadence\HIM_asi1664\ASI\Update4\SpeedXP\SpeedXP Suite x64\PowerSI.exe" enable=yes profile=any description="d:\Cadence\HIM_asi1664\ASI\Update4\SpeedXP\SpeedXP Suite x64\PowerSI.exe"
请注意,上面的命令包含两次可执行文件名,即netsh.exe
,这就是问题所在。我首先尝试LaunchAppAndWait
使用整个命令作为可执行文件的名称并将空字符串作为参数传递。接下来我尝试将第一个netsh.exe作为程序名称传递,将剩余的文本作为参数传递。这两种方法都不起作用。
答案 0 :(得分:3)
由于问题是关于InstallScript的,所以这里有一个简单的功能。
// prototype void CmdExecute( STRING );
//---------------------------------------------------------------------------
// Function: CmdExecute
//
// Purpose: Asynchronusly execute a command line statement in the background
//
//---------------------------------------------------------------------------
function void CmdExecute( szCommand )
begin
LaunchApplication( "cmd.exe", "/C " + szCommand, "",
SW_HIDE, 0, LAAW_OPTION_NOWAIT );
end;
在您的具体情况下,如果您需要执行一系列命令,或者遇到其他并发症,我建议使用批处理文件。如果需要,您可以动态编写一个(在没有向项目添加文件的情况下使用纯的installscript解决方案),通过LaunchApplication(或其变体)运行它,然后删除它。
作为一个不错的小技巧,我喜欢将这样的批处理文件删除。怎么样?最后,添加:
cmd.exe /C timeout 30 >nul & del "%0" /q
这会启动一个单独的进程,因此批处理文件不再使用。完整的30秒延迟并非真的有必要,但事实证明它在过去总是对我有用。如果你想快点完成,你可以调整那个时间。关键是要确保可以删除批次,如果它正在使用中,它就不会被删除。
答案 1 :(得分:0)
自定义操作向导 - >启动Exectuable - >存储在目录表中 - > SystemFolder(作为来源)
然后对于目标做:cmd /c "SOMETHING"
,
其中SOMETHING
替换为您的命令。你唯一需要担心的是逃避所有的双引号。
然后在执行序列中的“Cost Finalize”之后对动作进行排序,你应该很好。
尚未对其进行全面测试,但应该可以正常使用。