Para rodar aplicativos como administrador a mesma precisa estar configurada no registro e descobri uma chave no registro que faz isto.
Portanto saquei a informação e posto aqui para que testem e vejam se funciona.
O conteúdo do arquivo .REG que pode ser executado via Prompt de comando é:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\PASTA\\SISTEMA.EXE"="RUNASADMIN"
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\C:\PASTA]
"sistema.exe"="RUNASADMIN"
Onde sistema é o nome de seu aplicativo e pasta é o nome da pasta que esta o mesmo.
Pensando em automatizar criei uma função em meu sistema(Fivewin), que pode ser implementada por todos, na linguagem preferida.
Função RunASS:
FUNCTION RunASS( cCaminhoCompleto, lXPCompativel )
*****************************************************
* Grava o registro do aplicativo
*****************************************************
DEFAULT lXPCompativel := .F.
LOCAL cRunName, cRunKey, cRegKey
cRegRoot := HKEY_CURRENT_USER
cRegKey := "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
cRegValue:= ["]+cCaminhoCompleto+["="]+iif(lXPCompativel,"WINXPSP2 ","")+[RUNASADMIN"]
SETREGVAR( cRegRoot, cRegKey, "EnableLUA", cRegValue )
cRegValue:= ["]+cFileName(cCaminhoCompleto)+["="]+iif(lXPCompativel,"WINXPSP2 ","")+[RUNASADMIN"]
SETREGVAR( cRegRoot, cRegKey, "EnableLUA", cRegValue )
RETURN nil
Os parâmetros são:
cCaminhoCompleto - Caminho completo do aplicativo, exemplo: c:\pasta\subpasta\outrapasta\sistema.exe
lXPCompativel - colocar .t. se caso quer forçar execução em modo de compatibilidade
Exemplo:
...
RunASS( "c:\pasta\subpasta\outrapasta\sistema.exe", .f. )
...
As funções que usei aqui foram elaboradas para uso com o Fivewin que usa a classe tReg32().
Função SetRegVar()
FUNCTION SETREGVAR( nKey, cRegKey, cSubKey, uValue )
LOCAL oReg, cValue
nKey := IF( nKey == NIL, HKEY_CURRENT_USER, nKey )
uValue := IF( uValue == NIL, "", uValue )
oReg := TReg32():Create( nKey, cRegKey )
cValue := oReg:Set( cSubKey, uValue )
oReg:Close()
RETURN cValue