[RESOLVIDO] Alterar nível de privilégio do Windows 7 (C++)

12 respostas
E

Olá pessoal!

Queria saber como que eu posso alterar o nível de privilégio (para Adminstrador) pelo C++.
Não quero ter que clicar com o botão direito do mouse e mandar “executar como Administrador”, porque eu preciso distribuir esse executável junto com meu aplicativo.

Obrigada

12 Respostas

E

http://msdn.microsoft.com/en-us/library/bb756929.aspx

E

Obrigada!
vou ver se consigo agora!

E

Obrigada entanglement, consegui fazer o manifest aqui!
Funcionou

E

Aiaiaiaiaiaiaiaiai!!!
Eu sei que é uma pergunta boba.... mas eu consegui fazer o MANIFEST pro VC++, mas o código que eu fiz no Dev C++ (e funcionava) não funciona no Visual C++... Quando eu executo o EXE, dá erro.
Eu preciso fazer algo diferente no VC++??

Este é meu código:
#include <Windows.h>

int main() {
	STARTUPINFO infoBina = {sizeof(infoBina)};
    PROCESS_INFORMATION processInfoBina;
    infoBina.dwFlags = STARTF_USESHOWWINDOW;
    infoBina.wShowWindow = SW_HIDE;
    
    if (CreateProcess(NULL, L"java -jar medfour-technic.jar", NULL, NULL, FALSE,
            0, NULL, NULL, &infoBina, &processInfoBina)) {
        
        CloseHandle(processInfoBina.hProcess);  
        CloseHandle(processInfoBina.hThread);  
    }  
    return 0;
}

Obrigada

E

Só chutando, mas é porque ele não encontra o java.exe ? Talvez quando executado como administrador o path seja um pouco diferente :slight_smile:

E

testei aqui, mas não é por causa disso não.
Troquei

CreateProcess(NULL, L"java -jar medfour-technic.jar", NULL, NULL, FALSE, 0, NULL, NULL, &infoBina, &processInfoBina)
por

CreateProcess(NULL, L"\"C:\\Program Files\\Java\\jre6\\bin\\java.exe\" -jar medfour-technic.jar", NULL, NULL, FALSE, 0, NULL, NULL, &infoBina, &processInfoBina)

Outra coisa… quando eu tinha meu EXE criado pelo Dev C++, eu mandava executar como Administrador manualmente e funcionava normal.

Com certeza é algo que o VC++ exige de diferente :frowning:

Obrigada

E

Resolvi meu problema usando o Dev C++... não sei o que acontece comigo que eu NUNCA consegui compilar um codigozinho sequer no VC++.....

Foram esses os passos: Criei no diretório do meu projeto um arquivo chamado medfour.rc com o seguinte código:
// Manifest include
24      1       DISCARDABLE     "medfour.manifest"
Criei no diretório do meu projeto um arquivo chamado medfour.manifest com o seguinte código:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="IsUserAdmin"
     type="win32"/> 
  <description>Description of your application</description> 
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>

No Dev C++, fui em Project Properties -> Directories -> Resource Directories e adicionei o caminho do meu arquivo .RC que eu criei (E:\sistemas\medstorm\trunk\medfour-technic\cpp).

Tudo compilou com esse código:
#include <windows.h>

int main() {
	STARTUPINFO infoBina = {sizeof(infoBina)};
    PROCESS_INFORMATION processInfoBina;
    infoBina.dwFlags = STARTF_USESHOWWINDOW;
    infoBina.wShowWindow = SW_HIDE;
    
    if (CreateProcess(NULL, "java -jar medfour-technic.jar", NULL, NULL, FALSE,
            0, NULL, NULL, &infoBina, &processInfoBina)) {
        
        CloseHandle(processInfoBina.hProcess);  
        CloseHandle(processInfoBina.hThread);  
    }  
    return 0;
}

Até mais

E

Conforme você deve ter lido no MSDN, o Visual Studio requer que esse arquivo .manifest seja inserido no executável não como um resource normal, mas usando a ferramenta mt.exe. Acho que foi isso que lhe quebrou as pernas. Argh

V

Não use o DevCpp. Ele é uma IDE antiga, que trabalha com uma versão muito pré-histórica do MinGW. Se você se dá bem com ele, é porque gosta do compilador MinGW, que é o que essa IDE usa. Uma alternativa mais nova com o MinGW é o CodeBlocks:
http://www.codeblocks.org/

Embora eu recomende fortemente que você perca algum tempo entendendo melhor pq seus códigos não compilam no Visual. O Visual hoje é de longe a melhor IDE do mercado para Windows, com ótimos recursos de depuração e code completion.

E

Obrigada ViniGodoy, vou seguir o seu conselho…

O problema é que eu nunca estudei C++.
Preciso, na verdade, comprar um livro pra entender melhor a linguagem e tirar um tempo pra estudar de verdade, porque eu só ando usando na empresa, quando eu preciso fazer uma coisa ou outra no C.

Até mais

E

ViniGodoy:
Não use o DevCpp. Ele é uma IDE antiga, que trabalha com uma versão muito pré-histórica do MinGW. Se você se dá bem com ele, é porque gosta do compilador MinGW, que é o que essa IDE usa. Uma alternativa mais nova com o MinGW é o CodeBlocks:
http://www.codeblocks.org/

Embora eu recomende fortemente que você perca algum tempo entendendo melhor pq seus códigos não compilam no Visual. O Visual hoje é de longe a melhor IDE do mercado para Windows, com ótimos recursos de depuração e code completion.

Nao foi exatamente o código que quebrou no MSVC. O problema é que o Visual Studio, por alguma idiossincrasia, não aceita que um arquivo .manifest seja incluido simplesmente como resource do projeto; uma vez já tive de fazer a mesma coisa que a Eliangela precisou, e aprendi a duras penas que é necessário usar um wizard do Visual Studio que inclui como um passo do projeto a execução dessa ferramenta mt.exe. (Na verdade, como a minha versão do Visual Studio era antiga, tive de rodar eu mesmo a ferramenta mt.exe manualmente - oh oh, personalizei os passos do build, é claro, mas isso é uma coisa que é terrivelmente sujeita a erros).

E

Consegui isso usando o visual C++.

Disponibilizei a solução no meu site: http://www.eliangela.info/

Obrigada pela ajuda

Criado 16 de agosto de 2011
Ultima resposta 20 de ago. de 2011
Respostas 12
Participantes 3