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

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

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

Obrigada!
vou ver se consigo agora!

Obrigada entanglement, consegui fazer o manifest aqui!
Funcionou

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:

[code]#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;

}[/code]

Obrigada

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

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

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 &quot;medfour.manifest&quot;
Criei no diretório do meu projeto um arquivo chamado medfour.manifest com o seguinte código:

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt; &lt;assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"&gt; &lt;assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="IsUserAdmin" type="win32"/&gt; &lt;description&gt;Description of your application&lt;/description&gt; &lt;trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"&gt; &lt;security&gt; &lt;requestedPrivileges&gt; &lt;requestedExecutionLevel level="requireAdministrator" uiAccess="false"/&gt; &lt;/requestedPrivileges&gt; &lt;/security&gt; &lt;/trustInfo&gt; &lt;/assembly&gt;

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:

[code]#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;

}[/code]

Até mais

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

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.

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

[quote=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.[/quote]

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

Consegui isso usando o visual C++.

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

Obrigada pela ajuda