2013-11-04 43 views
2

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

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

这是为了能够正确阅读HKLM的一些键而添加的。

我该如何解决这个问题?

+1

它是否有一个表明它必须以管理员身份运行的清单?如果从提升的命令提示符运行它,行为是否会改变? –

+0

你如何从蝙蝠运行你的exe文件?使用名称或使用call命令? – Raxvan

+0

你是对的,这有清单作为管理员运行。这是为了能够在没有虚拟化的情况下阅读HKLM所需的。同一个可执行文件作为服务运行,但它也可以作为控制台应用程序运行。我必须*阅读*来自HKLM的一些设置,甚至可能写入(不确定)。没有这个,我很惊讶没有从HKLM中读到任何东西。 – sorin

回答

3

您不需要在应用程序清单中指定的requireAdministrator以使其能够在没有虚拟化的情况下从HKLM读取数据。

您不需要提升以便从HKLM读取。只要你的进程有一个指定requestedExecutionLevel的应用程序清单,它就不会被虚拟化。因此,结论是您需要指定asInvokerrequestedExecutionLevel

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