【问题标题】:InstallScript can not read text file containing result from command promptInstallScript 无法读取包含命令提示符结果的文本文件
【发布时间】:2018-04-26 02:30:56
【问题描述】:

我正在编写一个 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 而不是使用我的脚本,它会完美地运行该命令。我的脚本有什么问题以及如何解决这些问题?提前谢谢大家。

【问题讨论】:

  • wslconfig 不在我的 Windows 10 Pro 的默认路径中。当 InstallShield 运行时,路径变量可能会丢失为手动启动 cmd.exe 添加的任何路径。微星也有这样的怪癖,
  • 好吧,我确实打开了 Windows 功能“Linux 的窗口子系统”,因此在与 cmd.exe 相同的文件夹中启用 wslconfig.exe: C:\WINDOWS\system32 我错过了什么吗?请您进一步解释 MSI 的怪癖好吗?我真的很感激。
  • 我会添加到 wslconfig 的完整路径,以便您排除故障。
  • 我听从了你的建议,但结果还是一样。我注意到我可以运行 wslconfig 的唯一方法是从命令提示符。直接执行wslconfig.exe什么都不做。

标签: command-prompt installshield installscript


【解决方案1】:

我在这里看到了两个可能令人困惑的元素。一种是 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 读取文件? GetLine() 和 ListReadFromFile() 都不起作用,即使我确实以 FILE_MODE_NORMAL(只读模式)打开了文件。但是当我手动打开、编辑和手动保存文件时,我的脚本可以正常读取文件。似乎在我运行命令行后,文件的指针指向文件末尾。这带来了另一个困惑: FILE_MODE_NORMAL 不是应该在文件开头设置文件指针吗?非常感谢您的建议。
  • 关于最后一个问题(运行命令行后读取文本文件),有人建议流或文件可能已打开,因此我无法从脚本中读取文件。但是 OpenFile() 根本没有返回错误。有没有办法检查/解决这个问题?
  • 如果您的代码类似于OpenFile example,我不认为文件位置有问题;它们不会在文件打开时持续存在,更不用说单独的进程了。也许文件中的换行符不寻常?为了更多的目光,您应该将此作为一个新问题提出。
  • 我已经发布了这个问题的详细信息,希望你能看看并告诉我你的想法。感谢您的意见。 link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多