PDA

View Full Version : |Source| Fix abrir Launcher automático ao executar o main diretamente



romariols
03/12/2020, 02:42 PM
Bom... Eu fiz esse código baseado na função original que vem nos Main. Naturalmente, ao executar o Main direto, um arquivo "Mu.exe" (talvez seja o Launcher de quem fez o código) deveria ser executado no lugar dele, no entanto, nada acontece, mesmo que vc renomeie seu Launcher para "Mu.exe".

Então fiz esse código que deve ser executado no inicio desta função para corrigir isso. Não está muito bom, mas é funcional e bem simples, quem quiser pode estar melhorando a sua maneira, como por exemplo, colocar para iniciar um arquivo que faz update do cliente, ou ainda usar a função CreateProcess. Enfim.

O que o código faz?
Ao abrir o Main diretamente, ele iniciará o Launcher automaticamente e encerrará o processo do Main. Forçando o usuário a abrir o jogo pelo Launcher.

Caso o Launcher não seja encontrado no diretório, ao invés de não fazer nada, ele emite um alerta avisando que o jogo não pode ser iniciado pq o Launcher está faltando.

2464

É um código simples, mas bem util e bem melhor do que usar um JMP como já vi em várias sources.


bool ReadyLauncher()
{
FILE* FileCheck = NULL;

if ((FileCheck = fopen("Launcher.exe", "rb")) == NULL)
{
MessageBoxA(NULL, "O jogo não pode iniciar por que o Launcher não foi encontrado", "Error!", MB_OK | MB_ICONSTOP);
ExitProcess(NULL);
return FALSE;
}

WinExec("Launcher.exe", SW_SHOW);

return TRUE;
}

Créditos: Romário Leite

SmileY
03/12/2020, 05:38 PM
Eu não tenho certeza, mas usar WinExec vai fazer alguns anti-virús dispararem.
Vou analizar isso mas é só ajustar alguns offsets no main para ele usar essa função nativamente

romariols
03/12/2020, 05:48 PM
Eu não tenho certeza, mas usar WinExec vai fazer alguns anti-virús dispararem.
Vou analizar isso mas é só ajustar alguns offsets no main para ele usar essa função nativamente
Sim. O ideal é usar CreateProcess, já que WinExec é uma função é obsoleta e da época dos Windows de 16 bits. Mas esta ainda funciona bem.

SmileY
03/12/2020, 07:13 PM
Sim. O ideal é usar CreateProcess, já que WinExec é uma função é obsoleta e da época dos Windows de 16 bits. Mas esta ainda funciona bem.

O problema mesmo é o anti-virus que detecta o uso de qualquer função que execute comandos na máquina kk

romariols
03/12/2020, 07:43 PM
O problema mesmo é o anti-virus que detecta o uso de qualquer função que execute comandos na máquina kk
Bom, pelo oq estudei, a Microsoft recomenda usar CreatProcess pq esta função inicia o novo processo e seu thread principal sem transferir nenhum parâmetro para o novo processo que entrará em execução, sendo assim, executado no contexto de segurança do processo de chamada. Logo não é normal se algum anti-virus acusar algo usando esta função.

Já tive problemas com a WinEx com o Windows Defender, hoje uso CreatProcess conforme as recomendações da Microsoft e não tenho nenhum problema com Anti-virus no Windows.

RadeoN
29/01/2021, 11:37 AM
push to controller.cpp ?