我写一个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:\Windows\SysWow64\cmd.exe
) - 运行不同的命令,如
cmd /c echo got-it > D:\output.txt
我怀疑你可能要解决这两个,但坚信32位的情况下是有问题的。 为了解决这一背景下,考虑改变你的代码下面,使用WINSYSDIR64 :
...
szCmdPath = WINSYSDIR64 ^ "cmd.exe";
...
Disable(WOW64FSREDIRECTION);
LaunchAppAndWait(...)
Enable(WOW64FSREDIRECTION);
(作为一种替代方法,可以使用C:\的Windows \ Sysnative从32位上下文没有禁用WOW64FSREDIRECTION访问64位文件夹不幸的是,不与路径填充所以你必须构造或硬的变量。代码路径)。
为了解决输出电位重定向问题,考虑引用的参数/ C:
...
szCmdLine = "/c \"wslconfig /l > D:\\output.txt\"";
...