【问题标题】:Windows console app opens in new console instead of the same consoleWindows 控制台应用程序在新控制台而不是同一控制台中打开
【发布时间】:2013-11-04 14:45:20
【问题描述】:

我确实有一个 Windows 控制台应用程序,用 C++ 编写并使用控制台子系统进行编译,但是当从命令行启动时,它会打开一个新窗口,而不是重复使用同一个控制台窗口。

似乎原因是可执行文件有一个需要管理员权限才能运行的清单。

添加此功能是为了能够正确读取 HKLM 的某些密钥。

我该如何解决这个问题?

【问题讨论】:

  • 它是否有一个清单表明它必须以管理员身份运行?如果您从提升的命令提示符运行它,行为会改变吗?
  • 如何从 bat 运行 exe?使用名称还是使用调用命令?
  • 你是对的,这有清单以管理员身份运行。为了能够在没有虚拟化的情况下读取 HKLM,这是必需的。相同的可执行文件作为服务运行,但它也可以作为控制台应用程序运行。我确实必须读取 HKLM 的一些设置,甚至可能写(不确定)。没有这个,我很惊讶没有从 HKLM 读到任何东西。
  • 启动控制台以管理员权限运行程序...
  • 我已经这样做了,没关系,我什至可以接受它作为答案。除非有人还可以提供有关防止 Windows 虚拟化此应用程序的 HKLM 条目的解决方案,在这种情况下,我可以从清单中禁用 require Admin privs。谢谢。

标签: c++ winapi visual-c++ console


【解决方案1】:

您无需在应用程序清单中指定 requestedExecutionLevelrequireAdministrator 即可使其无需虚拟化即可从 HKLM 读取。

您无需提升即可阅读 HKLM。只要您的进程有一个指定requestedExecutionLevel 的应用程序清单,那么它就不会被虚拟化。因此,结论是您需要指定asInvokerrequestedExecutionLevel

注册表虚拟化的详细信息可以在MSDN docs 中找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多