可能重复:
How to prevent Vista from requiring elevation on patch.exe?
我的一个程序名为“PatchCompiler.exe”。它在控制台中运行。或者更确切地说,它不会运行,因为如果它在名称中的任何位置都有“Patch”,Windows 7会以不同的方式处理EXE文件,需要提升权限(“您是否希望允许来自未知发布者的以下程序对此进行更改电脑?”)。即使我授予此权限,它也会在一个短暂的控制台中运行,在我看到它的输出之前就会消失。
是的,我知道我可以通过重命名我的程序来解决这个问题。但它编译补丁......
有人知道如何改变这种恼人的行为吗?
编辑添加:只是为了让自己明确:我不希望我的程序以提升的状态运行!谁知道我留下了什么错误?
答案 0 :(得分:5)
答案 1 :(得分:2)
好的,我得到了它,感谢phihag的回答。它不是直接从盒子里工作,所以这就是我做的:
创建文件Manifest.xml
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
创建资源文件Manifest.rc
:
#include "winuser.h"
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST Manifest.xml
编译资源文件以创建Manifest.res
:
windres --input Manifest.rc --output Manifest.res --output-format=coff
将Manifest.res
添加到链接:
g++ -Wall -oPatchCompiler PatchCompiler.cpp Manifest.res
就是这样!
答案 2 :(得分:-1)
据我所知,这是一个功能,而不是一个错误。我们的想法是确保您真的想在计算机上运行补丁。
另外,据我所知,没有一个很好的方法来解决这个问题。您可以禁用UAC或重命名程序。
就控制台而言,这是一个编程问题,而且没有足够的信息来帮助你。你应该简单地添加一个支票,在你关闭程序之前会等到你做某事。一个典型的例子是从终端读取一个字符。
您可以启动一个提升的命令提示符,该命令提示符在启动程序时不应该带来UAC警告,并且应该在程序完成后保持打开状态。