Windows 7 EXE文件名以“Patch”开头,不会运行

时间:2011-10-27 09:07:43

标签: windows-7

  

可能重复:
  How to prevent Vista from requiring elevation on patch.exe?

我的一个程序名为“PatchCompiler.exe”。它在控制台中运行。或者更确切地说,它不会运行,因为如果它在名称中的任何位置都有“Patch”,Windows 7会以不同的方式处理EXE文件,需要提升权限(“您是否希望允许来自未知发布者的以下程序对此进行更改电脑?”)。即使我授予此权限,它也会在一个短暂的控制台中运行,在我看到它的输出之前就会消失。

是的,我知道我可以通过重命名我的程序来解决这个问题。但它编译补丁......

有人知道如何改变这种恼人的行为吗?

编辑添加:只是为了让自己明确:我不希望我的程序以提升的状态运行!谁知道我留下了什么错误?

3 个答案:

答案 0 :(得分:5)

附加包含

application manifest
<requestedExecutionLevel level="asInvoker" uiAccess="true"/>

答案 1 :(得分:2)

好的,我得到了它,感谢phihag的回答。它不是直接从盒子里工作,所以这就是我做的:

  1. 创建文件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>
    
  2. 创建资源文件Manifest.rc

    #include "winuser.h"
    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST Manifest.xml
    
  3. 编译资源文件以创建Manifest.res

    windres --input Manifest.rc --output Manifest.res --output-format=coff
    
  4. Manifest.res添加到链接:

    g++ -Wall -oPatchCompiler PatchCompiler.cpp Manifest.res
    
  5. 就是这样!

答案 2 :(得分:-1)

据我所知,这是一个功能,而不是一个错误。我们的想法是确保您真的想在计算机上运行补丁。

另外,据我所知,没有一个很好的方法来解决这个问题。您可以禁用UAC或重命名程序。

就控制台而言,这是一个编程问题,而且没有足够的信息来帮助你。你应该简单地添加一个支票,在你关闭程序之前会等到你做某事。一个典型的例子是从终端读取一个字符。

您可以启动一个提升的命令提示符,该命令提示符在启动程序时不应该带来UAC警告,并且应该在程序完成后保持打开状态。