Ir ao conteúdo

Posts recomendados

Postado

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

Postado

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
Postado

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

 

Postado
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()?

 

Postado

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");

  • 2 semanas depois...
Postado
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.

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