[SOLVED] QProcess não inicia no Windows XP
-
Mano acho que pelo http://www.bloodshed.net/devcpp.html DevC++ vc consegue debugar e descobrir onde está a falha. sem um IDE não conheço a forma. se estiver usando GCC para compilar tente usar o parametro -d
-
pode ser falha no fonte do QT em relação ao XP Kernel, APIs, as famosas chamadas internas ;-)
-
Pois pode ser... tenho que ver um workaround... :-(
Vou experimentar usando as chamadas padrões do C/C++ pra iniciar outro processo e posto aqui o resultado.
O que queria mesmo era poder controlar a saída do processo pra fazer o Launcher sumir e reaparecer depois da execução do novo processo...
-
Alo novamente.
@TloRoy, isso executa normalmenteQuanto ao meu teste com chamada padrão C/C++ ficou pra depois, oq eu fiz entretanto foi passar meu projeto de Qt 4.8 pra Qt 5.1 e o erro ficou melhor, agora aparece uma mensagem quando o Launcher tenta executar o novo processo:
"Não foi possível localizar o ponto de entrada do procedimento InitOnceExecuteOnce na biblioteca de vínculo dinâmico KERNEL32.dll"
Esta deve ser a explicação de o processo ser terminado no Qt4.8 (mas sem mensagem).
Tenho agora que ver pq isto acontece...
-
Pronto... "MSDN.com says that this function is only available on Windows Vista and later" portanto... Qt nao suporta XP? :)
-
Mas acho que a função InitOnceExecuteOnce não é usada pelo Qt.
Dei uma olhada nos fontes do Qt (4.8 e 5.2) e não achei uso desta função pelo Qt. Ele usa a CreateProcess para iniciar processos.
Como você já testou com o notepad, não me parece um problema diretamente do Qt.
Este executável que você está tentando rodar.... posso dar uma olhada nele.
-
Olá novamente,
Pra tira teima, instalei tudo no xp e compilei o launcher lá. Mesmo problema...De fato outros executáveis rodam, mas este que está dando problema não dava quando o launcher era escrito em Lazarus, só quando o refiz em Qt...
o executável é este http://goo.gl/AymzjH
vlw
-
-
Esqueci de perguntar... No XP você está usando o VS2008 para compilar, certo?
Você pode usar o Dependency Walker (http://www.dependencywalker.com/) para verificar as dependências do EXE, e ver se está quebrado algo. É muito estranho mesmo você rodar o EXE "manualmente" e funcionar, e pelo Qt não.
Um coisa que você pode fazer com o Dependency Walker é fazer um "profiling": Rodar o programa pelo Dependency Walker" e ele analisa o carregamento de outras DLL's que ocorreram durante o programa (e não no início que é o normal). Pode tentar fazer isso também com o seu Launcher.
-
Qt 32 bits com Mingw 32 bits
Vou experimentar. Quero testar também com outras chamadas... enfim, tenho trabalho pro fds :-)
-
Criei um HelloWorldQT no netbeans, roda normal, abre a janelinha e tal. Então adicionei uma chamada CreateProcess() que é executada quando eu escrevo no textbox, e tudo correu lindamente...
@if (CreateProcessA((LPSTR) "C:/caminhodo/maldito.exe", NULL,
NULL, NULL, FALSE, 0, NULL,
NULL, &StartupInfo, &ProcessInfo)) {
std::cout << "OK" << std::endl;
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
std::cout << "OK2" << std::endl;
}@Portanto... isso é ou não um bug do Qt? :)
Update:
Copiei o código inteiro do QProcessPrivate::startDetached() que tem no qprocess_win.cpp do Src do Qt e continua funcionando... :-/
-
Ok, agora pra piorar... uso o QProcess dentro do HelloWorld (conforme o codigo do meu primeiro post) e funciona... :-(
Já estou ficando doido...
-
Resolvido... era um dll do jogo que foi compilado no W7... recompilando usando o MSVC Express dentro do XP resolve o problema...
Ufa :)