Windows 7 Windows 7 EXE文件名以“开始”;“补丁”;,韩元';跑不动

Windows 7 Windows 7 EXE文件名以“开始”;“补丁”;,韩元';跑不动,windows-7,Windows 7,可能重复: 我的一个程序叫做“PatchCompiler.exe”。它在控制台中运行。或者更确切地说,它不会运行,因为如果EXE文件的名称中有“补丁”,则Windows 7会以不同的方式处理该文件,需要提升权限(“是否允许来自未知发布者的以下程序对此计算机进行更改?”)。即使我授予这个权限,它也会在一个短暂的控制台中运行,在我看到它的输出之前就消失了 是的,我知道我可以通过重命名我的程序来解决这个问题。但是它编译补丁 有人知道如何改变这种恼人的行为吗 编辑后添加:只是为了让自己明白:我不希望我

可能重复:

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

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

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

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

附加一个包含

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

据我所知,这是一个功能,而不是一个bug。这个想法是为了确保你真的想在你的电脑上运行补丁

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

就控制台而言,这是一个编程问题,没有足够的信息来帮助您。您只需添加一个检查,它将在关闭程序之前等待您执行某项操作。一个典型的例子是从终端的末尾读取字符


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

好的,多亏了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.res

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

    g++ -Wall -oPatchCompiler PatchCompiler.cpp Manifest.res
    

  • 就这样

    功能或错误。。。信任Windows将文件内容基于名称,从而产生FUN.JPG.EXE病毒。。。胜利的神奇数字!Windows的这个奇怪的东西意味着我可以通过简单地重命名一个好的程序,让它看起来很邪恶。。。相反,以同样的方式使一个邪恶的补丁程序变得良好。干得好,微软。您可能认为最好根据程序的功能确定权限。。。如果它打开一个.exe/.dll进行读/写与执行。。。这是一个需要提升隐私的问题。这是一个bug;文件名与文件的内容无关。@David X这是一项功能。我不会评论它有多聪明。还有
    安装程序检测技术下的一个操作系统,它的行为基于字符序列“补丁”是否出现在可执行文件的名称中?真的,只有傻瓜才会设计这个。这是一个如此愚蠢的功能,以至于它是一个bug。我如何在MinGW下使用g++实现这一点?@TonyK请参阅以获得详细解释。这很有效(经过一点按摩)。非常感谢。我已经把细节写进了一个新的答案。(我会接受你的回答,但我最初将此作为另一个
    TonyK
    ..发布在superuser.com上)联系一个mod,让他们合并用户。@TonyK:对不起,我无法合并一个不存在的帐户。您必须使用相同的凭据登录到SU,以便迁移问题以保留您的身份。我在一个名为“DynamicDispatchTest.exe”的程序中遇到了类似的问题。没什么大不了的,因为很明显(从名字上看)它只是我创建的一个快速程序,用来测试一些东西,但我从来没有想到所有东西的文件名都是罪魁祸首!
    g++ -Wall -oPatchCompiler PatchCompiler.cpp Manifest.res