我正在编写一个控制台工具。如果没有提升 UAC 支持(清单文件)的权限,从命令提示符 ( cmd.exe ) 或控制台文件管理器(如far.exe)调用此工具会在同一窗口中打开它,将其输出写入同一窗口等。
但是现在,当添加清单文件时,在 UAC 请求对话框之后为工具创建了一个新的控制台窗口,因此工具的输出被写入那里,并且窗口关闭。这种工具没有目的是控制台。
如何解决?有哪些解决方法?
据我所知,没有办法“解决”这个问题。此行为是设计使然,旨在确保您提升的任何命令行工具不受非提升命令行中的任何路径修改的影响。
这个想法是,在正常的一天工作中,人们在他们的机器上运行任何程序。这些程序可能会修改用户的路径,例如将包含名为 reg.exe 的恶意程序的文件夹放在 c:\windows\system32 之前。然后用户运行一个需要提升的管理工具,该工具调用 reg.exe 而不指定路径,瞧——你拥有了。
您真的应该考虑将工具的输出保存到日志文件中。或者,您可以分两部分开发该工具 - 不需要提升的控制台工具和需要提升的 COM 进程外服务器。