InstallScript 无法从命令提示符读取包含结果的文本文件
InstallScript can not read text file containing result from command prompt
我正在为命令提示符中的 运行 命令编写 Installscript 函数,将结果从控制台重定向到文本文件,然后读取文本文件以获取信息。
// send command method
STRING szCmdPath, szCmdLine ;
szCmdPath = "C:\WINDOWS\system32\cmd.exe";
szCmdLine = "/c wslconfig /l > D:\output.txt";
LaunchAppAndWait(szCmdPath, szCmdLine, WAIT);
发送命令方法没有运行我想要的带有szCmdLine的命令,它无法识别命令并产生以下错误:
'wslconfig' 未被识别为内部或外部命令,
可运行的程序或批处理文件。
但是,如果我手动启动 cmd.exe 而不是使用我的脚本,它 运行 的命令完全没问题。我的脚本有什么问题以及如何解决这些问题?提前谢谢大家。
我在这里看到两个可能令人困惑的元素。一种是 32 位进程的文件系统重定向(导致加载无法找到 wslconfig 的 32 位 cmd.exe)。另一个是输出重定向的命令行处理是否会做你想做的问题。
要进行测试,您可以尝试以下操作:
- 运行 来自显式 32 位命令提示符的测试 (
c:\Windows\SysWow64\cmd.exe
)
- 运行 不同的命令,例如
cmd /c echo got-it > D:\output.txt
我怀疑您可能必须解决这两个问题,但坚信 32 位上下文存在问题。要解决上下文,请考虑将代码更改为以下内容,使用 WINSYSDIR64:
...
szCmdPath = WINSYSDIR64 ^ "cmd.exe";
...
Disable(WOW64FSREDIRECTION);
LaunchAppAndWait(...)
Enable(WOW64FSREDIRECTION);
(作为替代方法,您可以在 32 位上下文中使用 C:\Windows\Sysnative 来访问 64 位文件夹,而无需禁用 WOW64FSREDIRECTION。不幸的是,该路径没有填充变量,因此您必须构建或硬编码该路径。)
要解决输出潜在的重定向问题,请考虑引用 /c:
的参数
...
szCmdLine = "/c \"wslconfig /l > D:\output.txt\"";
...
我正在为命令提示符中的 运行 命令编写 Installscript 函数,将结果从控制台重定向到文本文件,然后读取文本文件以获取信息。
// send command method
STRING szCmdPath, szCmdLine ;
szCmdPath = "C:\WINDOWS\system32\cmd.exe";
szCmdLine = "/c wslconfig /l > D:\output.txt";
LaunchAppAndWait(szCmdPath, szCmdLine, WAIT);
发送命令方法没有运行我想要的带有szCmdLine的命令,它无法识别命令并产生以下错误:
'wslconfig' 未被识别为内部或外部命令, 可运行的程序或批处理文件。
但是,如果我手动启动 cmd.exe 而不是使用我的脚本,它 运行 的命令完全没问题。我的脚本有什么问题以及如何解决这些问题?提前谢谢大家。
我在这里看到两个可能令人困惑的元素。一种是 32 位进程的文件系统重定向(导致加载无法找到 wslconfig 的 32 位 cmd.exe)。另一个是输出重定向的命令行处理是否会做你想做的问题。
要进行测试,您可以尝试以下操作:
- 运行 来自显式 32 位命令提示符的测试 (
c:\Windows\SysWow64\cmd.exe
) - 运行 不同的命令,例如
cmd /c echo got-it > D:\output.txt
我怀疑您可能必须解决这两个问题,但坚信 32 位上下文存在问题。要解决上下文,请考虑将代码更改为以下内容,使用 WINSYSDIR64:
...
szCmdPath = WINSYSDIR64 ^ "cmd.exe";
...
Disable(WOW64FSREDIRECTION);
LaunchAppAndWait(...)
Enable(WOW64FSREDIRECTION);
(作为替代方法,您可以在 32 位上下文中使用 C:\Windows\Sysnative 来访问 64 位文件夹,而无需禁用 WOW64FSREDIRECTION。不幸的是,该路径没有填充变量,因此您必须构建或硬编码该路径。)
要解决输出潜在的重定向问题,请考虑引用 /c:
的参数...
szCmdLine = "/c \"wslconfig /l > D:\output.txt\"";
...