Этот озадачил меня на 30 минут.
Прежде всего, вам, вероятно, нужен манифест UAC, встроенный в ваше приложение (, как указано здесь ). Как то так:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Во-вторых (и на этом я застрял), когда вы запускаете свое приложение под отладчиком, оно создает ваш процесс в объекте задания. От чего ваш дочерний процесс должен быть в состоянии оторваться, прежде чем вы сможете назначить его на свою работу. Итак (да), вам нужно указать CREATE_BREAKAWAY_FROM_JOB
в флагах для CreateProcess
).
Если бы вы не работали под отладчиком, или ваш родительский процесс работал, этого бы не произошло.