使用Start-Process调用ResourceHacker时参数传递异常求助
解决PowerShell脚本中ResourceHacker参数传递失败的问题
方法1:直接调用可执行文件(推荐,同步执行)
如果不需要异步运行ResourceHacker,直接调用exe比Start-Process更可靠,参数解析逻辑和命令行/交互式PowerShell完全一致:
$rhPath = Join-Path $CICDBaseScriptPath 'ResourceHacker.exe' # 直接用变量替换路径 & $rhPath "-open `"$ReplaceTTKVersionInfoRC`" -save `"$TTKVersionInfoRes`" -action compile -log con"
方法2:正确使用Start-Process传递参数
如果必须用Start-Process(比如需要后台运行或控制窗口状态),不要手动拼接带嵌套引号的复杂字符串,要么传递参数数组,要么直接传递格式化后的参数串(无需外层单引号):
$rhPath = Join-Path $CICDBaseScriptPath 'ResourceHacker.exe' # 方案A:用参数数组传递,更清晰 $arguments = @( "-open", "`"$ReplaceTTKVersionInfoRC`"", "-save", "`"$TTKVersionInfoRes`"", "-action", "compile", "-log", "con" ) Start-Process -FilePath $rhPath -ArgumentList $arguments -Wait # 方案B:直接传递格式化后的参数字符串 $argString = "-open `"$ReplaceTTKVersionInfoRC`" -save `"$TTKVersionInfoRes`" -action compile -log con" Start-Process -FilePath $rhPath -ArgumentList $argString -Wait
问题根源
你原来的代码手动拼接了带外层单引号的嵌套引号字符串,比如"'open "..." -save "..." -action compile'"。但Start-Process不会像cmd/交互式PowerShell那样自动剥离外层单引号,它会把整个字符串(包括外层单引号)原封不动传给ResourceHacker,导致程序无法识别正确的命令参数,只会启动而不执行编译操作。
内容的提问来源于stack exchange,提问作者Somin
相关产品推荐
相关产品推荐

