Ir ao conteúdo
  • Cadastre-se

C++ Executando arquivo externo com C/C++


Anderson LTI

Posts recomendados

Seguinte, vou resumir, porque eu já estou pé da vida 🤬 com esse problema que eu não sei porque está ocorrendo, eu tô com um arquivo em C++ bem simples, tudo que esse arquivo precisa fazer é executar outro veja: 

#include <iostream>
#include <stdlib.h>

using namespace std;
int main() {
	system("run\\run.vbs");	
}

Ele precisa executar um arquivo vbs e esse arquivo vbs está executando um arquivo .bat em segundo plano, foi a única maneira que achei, esse é o conteúdo do arquivo vbs:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "script.bat", 0

Quando eu executo o vbs direto clicando nele, ele vai normal, mas quando executo o .exe gerado do código acima do c++, ele retorna isso:  

Untitled.png

Link para o comentário
Compartilhar em outros sites

Parece um longo caminho para executar um batch file. Não pode programar direto em C++ o que tem lá?

 

Chamar system() para fazer algo, e usando C ou C++, é algo estranho: não está de fato fazendo nada. Apenas chamando o interpretador de comandos do sistema para executar uma linha de comando. E no seu caso é para executar uma linha de comando que chama uma linha de comando para abrir um arquivo de comandos... E está fazendo isso em um programa na linguagem que foi usada para escrever o próprio sistema...

 

Não pode usar CreateProcess() e rodar isso? Não pode incorporar a funcionalidade do batch em seu programa?

 

Uma opção seria talvez também criar uma tarefa com o agendador de tarefas e de seu programa pedir pra executar pelo nome dela?

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@arfneto Como disse foi a única maneira que encontrei, é bem enrrolado, mas quando tentei chamar direto, mesmo com tudo certinho ele não funcionava, o único método que consegui foi esse e mesmo assim tá dando esse erro eu poderia chamar pra ele rodar direto, mas como disse, não sei por que motivo mesmo fazendo tudo semânticamente correto não roda. Estou começando a achar que alguma variável de ambiente do windows ou algo do tipo esteja dando esse erro.

 

Link para o comentário
Compartilhar em outros sites

45 minutos atrás, Anderson LTI disse:

Como disse foi a única maneira que encontrei, é bem enrrolado

 

Sim. É até engraçado. chamar system já é meio ingênuo. Mas chamar system() para criar um shell para rodar um script .bat eu nunca tinha visto.

 

Não pode simplesmente executar o que tem no .BAT no programa em C ou C++?
 

Citação

um script .BAT é mais limitado que um programa em C ou C++

 

Entendeu o que te falei sobre as alternativas? Como criar um task associado a um evento? Ou usar CreateProcess()?

 

Link para o comentário
Compartilhar em outros sites

Se os arquivos .vbs e .bat estiverem o sudiretório "run", como parece ser o caso, mude o diretório atual de execução para esse subdir usando a função chdir() e chame o vbs diretamente:

#include <dirent.h>   // cabeçalho necessário para chdir()

chdir("run");
system("run.vbs");

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
1 hora atrás, Anderson LTI disse:

Sim é possível fazer isso só usando C++, o problema é que perde a função de executar em background, pois não achei nenhuma maneira de executar o script em background só com c++

 

Deve ter muitas maneiras de fazer isso rodar, afinal o sistema foi todo praticamente escrito em C e C++.

  • você pode usar C++ e inserir a execução do batch na agenda do sistema
  • você pode rodar como serviço
  • você pode (re-) escrever o próprio script .BAT em C ou C++
  • use CreateProcess() e execute o que quer fazer. O novo processo vai rodar por conta. Experimente abrir alguns programas assim e vai entender.
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...