Página 1 de 1

Configurar aplicativo com Administrador(RUNASAdmin).

Enviado: 12 Jun 2014 17:22
por rochinha
Amiguinhos,

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 é:

Código: Selecionar todos

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:

Código: Selecionar todos

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:

Código: Selecionar todos

...
   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()

Código: Selecionar todos

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

Configurar aplicativo com Administrador(RUNASAdmin).

Enviado: 13 Jun 2014 10:20
por sambomb
Pode colocar o Default do nome do exe para GETMODULEFILENAME( GETINSTANCE() )
Assim o padrão vai ser o nome do seu executável, independente de ele ter sido renomeado ou não. ;)

Código: Selecionar todos

FUNCTION RunASS( cCaminhoCompleto, lXPCompativel )
*****************************************************
* Grava o registro do aplicativo
*****************************************************
LOCAL cRunName, cRunKey, cRegKey

   DEFAULT cCaminhoCompleto := GETMODULEFILENAME( GETINSTANCE() ), lXPCompativel := .F.

   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

Configurar aplicativo com Administrador(RUNASAdmin).

Enviado: 15 Jun 2014 17:14
por rochinha
Amiguinhos,

Obrigado Sambomb.
Pode colocar o Default do nome do exe para GETMODULEFILENAME( GETINSTANCE() )
Eis um pequeno exemplo e uma modificação da função RunASS():

Código: Selecionar todos

#include "fivewin.ch"

FUNCTION Main()
   RunASS( GETMODULEFILENAME( GETINSTANCE() ), .f. )
   return .t.

FUNCTION RunASS( cCaminhoCompleto, lXPCompativel )
   *****************************************************
   * Grava o registro do aplicativo 
   *****************************************************
   LOCAL HKEY_CURRENT_USER   := 2147483649
   LOCAL HKEY_LOCAL_MACHINE  := 2147483650
   LOCAL HKEY_CURRENT_CONFIG := 2147483653
   LOCAL KEY_ALL_ACCESS      := 983139
   LOCAL cRunName, cRunKey, cRegKey
   DEFAULT lXPCompativel := .F.
   cRegRoot := HKEY_CURRENT_USER
   cRegKey  := "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
   cRegValue:= iif(lXPCompativel,"WINXPSP2 ","")+[RUNASADMIN]
   SETREGVAR( cRegRoot, cRegKey, cCaminhoCompleto, cRegValue )
   RETURN .t.

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

Configurar aplicativo com Administrador(RUNASAdmin).

Enviado: 18 Mai 2016 18:20
por fladimir
No caso colocaria pra chamar a função q define o App pra rodar como administrador no inicio da mesma e depois o sistema continua normalmente ou teria q reiniciar o micro?

Configurar aplicativo com Administrador(RUNASAdmin).

Enviado: 18 Mai 2016 19:09
por rochinha
Amiguinhos,

Aqui é apresentado de forma programática o salvamento destas características no registro direto de seu aplicativo.

Dependendo do uso que fará voce pode usar as dicas colocadas em Reiniciar sistema que saiu do ar brutalmente.

Onde diz "RUNAS" coloque "RUNASS" caso não funcione.

Configurar aplicativo com Administrador(RUNASAdmin).

Enviado: 21 Jun 2016 14:06
por janio
Tem alguma função em harbour puro que substitua essa função/classe do fivewin (tReg32)?

Janio

Configurar aplicativo com Administrador(RUNASAdmin).

Enviado: 21 Jun 2016 16:19
por rochinha
Amiguinhos,

janio
Não consigo olhar no código do meu sistema porque o hd com toda minha vida parou.

Lá sei que tenho vários códigos com métodos de escrita e leitura do registro do windows.

Mas se quiser usar o regedit.exe voce poderá mandar os comandos contidos em um arquivo .REG contendo os caminhos, pastas e chaves que queres modificar:

Sintaxes:
Exporta todo o registro(backup do registro incluindo o usuário corrente)
REGEDIT /E pathname

Exporta parte do registro(somente um caminho desejado)
REGEDIT /E pathname "RegPath"

Importa script de registro(geralmente um arquivo .REG) de forma interativa.
REGEDIT pathname

Importação silenciosa
REGEDIT /S pathname

Abre a GUI/Tela do aplicativo
REGEDIT

Permite abrir multiplas sessões do aplicativo
REGEDIT /m

Chaves:
/E : (E)xporta
/S : Importação (S)ilenciosa

Você também poderá comandar mudanças no registro usando o comando REG contido na sessão Prompt do MS-DOS. Ao acionar o comando você passa de forma direta comandos como parâmetros.

Neste primeiro momento você usará somente 2(dois) comandos, ADD e DELETE. Para mais comandos basta enviar REG /? ou REG ADD /?:

Sintaxe:

REG ADD [ROOT\]RegKey /v ValueName [/t DataType] [/S Separator] [/d Data] [/f]
REG ADD [ROOT\]RegKey /ve [/d Data] [/f] -- Set the (default) value

REG DELETE [ROOT\]RegKey /v ValueName [/f]
REG DELETE [ROOT\]RegKey /ve [/f] -- Remove the (default) value
REG DELETE [ROOT\]RegKey /va [/f] -- Delete all values under this key

Chaves:
ROOT :
HKLM = HKey_Local_machine (default)
HKCU = HKey_current_user
HKU = HKey_users
HKCR = HKey_classes_root
ValueName : Valor ou sequencia, dentro da chave selecionada que se deseja editar.
/d Data : Dado que se deseja armazenar como "String", inteiro etc
/f : Força atualização sem perguntar.
\\Machine : Nome de uma máquina remota. Caso não use a máquina corrente será usada como destino. Somente as chaves HKLM e HKU são permitidas em máquinas remotas.
FileName : Nome do arquivo que contém/conterá os dados do registro a serem manipulados.
KeyName : Nome da chave que carregará o conteudo salvo.
/S : Lista todas sub-chaves e valores.
/S Separator : Caracter usado para separar multi valores em REG_MULTI_SZ. Default é "\0"
/t DataType : Tipo do dado sendo manipulado, REG_SZ (default) | REG_DWORD | REG_EXPAND_SZ | REG_MULTI_SZ
/reg:32 : Força REG.exe a escrever na localização 32-bit do registro.
/reg:64 : Força REG.exe a escrever na localização64-bit do registro.
Output : /od escreve (somente os (D)iferentes), /os (somente os iguai(S)), /oa (Todos), /on (não escreve nada).


Exemplos:

REG ADD HKCU\Software\SS64 /v Sample /d "some test data"
REG QUERY HKCU\Software\SS64 /v Sample
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v HideFastUserSwitching /t REG_DWORD /d 1


Interessante:

Antes de fazer alterações no registro geralmente o sistema operacional pede para reiniciar a máquina. Para evitar isto, é necessário desativar esta característica fazendo com que as alterações possam ser feitas e finalizadas sem a reinicialização, assim:

RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True

Resumindo:

Através de programação e alguns comandos RUN você irá programar sua aplicação para "envenenar" o registro.

Lembrando que tudo isto acima explanado exige usuário elevado para modificações.

Configurar aplicativo com Administrador(RUNASAdmin).

Enviado: 21 Jun 2016 19:19
por janio
Ótimo, Rochinha!

Janio