How does FireFly create EXEs with "update" in the name without triggering UAC?

Started by Dan English, October 05, 2014, 12:42:46 AM

Previous topic - Next topic

Dan English

It is a known Windows "feature" that having the word "update" (among other words) in your EXE's name will make Windows Vista and higher display a UAC prompt upon running.

Here's a source that explains it: http://stackoverflow.com/questions/2222217/exe-name-like-update-exe-blocked-by-uac-in-scheduled-task.

In FireFly, I created a program called abcupdate.exe, and it there is no UAC prompt.  If I create the same thing in PB's native editor, the EXE triggers UAC.

What does FireFly do to circumvent this?

Wilko Verweij


Dan English

Ahh, you may be right.  I have my project set to delete all these files after compile so I didn't even notice.  Here's a part of the manifest file that may well take care of this:


    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
       <security>
          <requestedPrivileges>
             <requestedExecutionLevel level="asInvoker" uiAccess="false" />
          </requestedPrivileges>
       </security>
    </trustInfo>   


I guess I need to create a similar file for my pure PB program with these contents!  I'll give that a try later.

Thanks for the pointer...

Dan English

Thanks Wilko, a manifest solved the issue.

I know this forum is for FireFly, but to make this work in pure PB, I created a manifest file called "AbcUpdate.exe.manifest". It's identical to the one FireFly generates, but I set the "assemblyIdentity" section's "name" value to that of the EXE I'm was creating:


<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
    <assemblyIdentity
        version="0.2.0.5"
        processorArchitecture="X86"
        name="AbcUpdate"
        type="win32" />
    <description></description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="X86"
                publicKeyToken="6595b64144ccf1df"
                language="*" />
        </dependentAssembly>
    </dependency>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
       <security>
          <requestedPrivileges>
             <requestedExecutionLevel level="asInvoker" uiAccess="false" />
          </requestedPrivileges>
       </security>
    </trustInfo>
    <asmv3:application>
         <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
            <dpiAware>true</dpiAware>
         </asmv3:windowsSettings>
    </asmv3:application>

</assembly>


Then I included it into the EXE as a resource:

#RESOURCE MANIFEST, 1, "AbcUpdate.exe.manifest"

The final EXE no longer triggered UAC!