InstallScript无法读取包含命令提示符结果的文本文件



我正在编写一个installscript函数以在命令提示符中运行命令,将结果从控制台重定向到文本文件,然后读取文本文件以获取信息。

// send command method
STRING szCmdPath, szCmdLine ;
szCmdPath = "C:\WINDOWS\system32\cmd.exe";
szCmdLine = "/c wslconfig /l > D:\output.txt";
LaunchAppAndWait(szCmdPath, szCmdLine, WAIT);

send命令方法未根据我想要的SZCMDLine运行命令,它未能识别命令并产生以下错误:

'wslconfig'不被认为是内部或外部命令,可操作的程序或批处理文件。

但是,如果我手动启动cmd.exe而不是使用我的脚本,则它可以很好地运行命令。我的脚本有什么问题以及如何解决这些问题?提前谢谢大家。

我在这里看到了两个可能令人困惑的元素。一个是32位进程的文件系统重定向(导致加载32位CMD.EXE无法找到WSLConfig(。另一个问题是,输出重定向的命令行处理是否会执行您想要的。

进行测试,您可以尝试以下一些事情:

  • 从显式32位命令提示(c:WindowsSysWow64cmd.exe(
  • 运行测试
  • 运行其他命令,例如cmd /c echo got-it > D:output.txt

我怀疑您可能必须同时解决这两个问题,但强烈认为32位的环境是有问题的。要解决上下文,请考虑使用winsysdir64:

考虑将代码更改为以下内容。
...
szCmdPath = WINSYSDIR64 ^ "cmd.exe";
...
Disable(WOW64FSREDIRECTION);
LaunchAppAndWait(...)
Enable(WOW64FSREDIRECTION);

(作为另一种方法,您可以使用C: Windows Sysnative从32位上下文中访问64位文件夹而不会禁用WOW64FSREDIRECTIONT。不幸的是,该路径没有可变的填充构建该路径的构造或硬代码。(

要解决输出潜在的重定向问题,请考虑引用参数到/c:

...
szCmdLine = "/c "wslconfig /l > D:\output.txt"";
...

最新更新