Ir ao conteúdo
  • Cadastre-se

Executar comando direto no prompt de comandos


Posts recomendados

Boa tarde galera!

 

Estou tentando executar um comando direto no prompt de comandos, mas acaba executando uma instancia do meu programa e uma janela em branco do prompt de comandos, estou usando o codigo abaixo, preciso criar uma rota no desktop:

 

WinExec(PChar('cmd /c route add 10.1.25.0 mask 255.255.255.0 192.168.0.254'),SW_SHOWNORMAL);


Tentei fazer executando um arquivo.bat, mas ocorre o mesmo problema, tentei executar com

ShellExecute e com WinExec

 

Estranho que tentei esta linha de codigo e funciona (este comando desliga o computador):

WinExec(PChar('command.com /c shutdown -s'),SW_HIDE);

 

para executar o .bat usei este codigo:

WinExec(PAnsiChar(PChar('c:\rota.bat')), SW_SHOWNORMAL);

 

Estou usando o Windows 7.

 

Alguem já passou por este problema?

Link para o comentário
Compartilhar em outros sites

Boa Tarde!

 

Tente fazer assim:

WinExec(PAnsiChar('cmd.exe /c route add 10.1.25.0 mask 255.255.255.0 192.168.0.254'), sw_normal); // Use /c para janela do prompt não permanecer aberta.OUWinExec(PAnsiChar('cmd.exe /k route add 10.1.25.0 mask 255.255.255.0 192.168.0.254'), sw_normal); //OU /k para janela do prompt permanecer aberta..

Se quiser ocultar totalmente a janela do prompt utilize sw_hide no lugar de sw_normal.

 

E além de tudo é importante notar que o comando que você quer executar necessita de elevação (Deve ser executado como Administrador), enquanto estiver executando seu programa através do Delphi

deve iniciar o Delphi como Administrador para que após compilar inicie sua aplicação também com privilégios de ADM.

 

Acho que é isso!

 

Boa Sorte!

Link para o comentário
Compartilhar em outros sites

Boa tarde!

 

Obrigado pelo retorno, já havia feito testes desta forma que você passou e ocorre o mesmo problema, já fiz este teste de abrir como administrador, inclusive estou usando o administrador local para desenvolver.

 

Abrir a aplicação como administrador e ocorreu o mesmo problema, vide a foto em anexo.

 

 

Havia observado que, caso eu faça um novo projeto e não salve ele abre o prompt sem problemas, e cria as rotas, mesmo sem abrir como administrador, caso eu salve ai ocorre o problema.

 

Explicando a imagem que anexei, seria a janela de baixo quando clickei no botão criar rota, ela abriu a de cima e o prompt, o titulo do prompt ficou como sendo a linha de comando que deveria ser executado.

 

post-620637-0-28727900-1441304158_thumb.

Link para o comentário
Compartilhar em outros sites

Segue:

unit UnitMain;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ComCtrls, Grids, DBGrids, pngextra, ExtCtrls, StdCtrls, Mask,  DBCtrls, DB, ADODB,Registry;type  TFormMain = class(TForm)    Panel1: TPanel;    BtnConfig: TPNGButton;    DBGrid1: TDBGrid;    StatusBar1: TStatusBar;    EditSearch: TEdit;    Panel2: TPanel;    EditRota: TEdit;    Panel3: TPanel;    EditRede: TDBEdit;    BtnRota: TPNGButton;    Query: TADOQuery;    DSSearch: TDataSource;    ConSearch: TADOConnection;    Label1: TLabel;    EditGateway: TDBEdit;    TCorrigirRota: TTimer;    procedure BtnConfigClick(Sender: TObject);    procedure EditSearchChange(Sender: TObject);    procedure EditRedeChange(Sender: TObject);    procedure TCorrigirRotaTimer(Sender: TObject);    procedure BtnRotaClick(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;var  FormMain: TFormMain;implementationuses UnitCadastro, UnitDM;{$R *.dfm}procedure TFormMain.BtnConfigClick(Sender: TObject);beginif FormCadastro= NIL then //cria o form se ele não foi criado aindabegin  Application.CreateForm(TFormCadastro,FormCadastro); // cria o form  FormCadastro.ShowModal; //exibe o formulárioend;end;procedure TFormMain.EditSearchChange(Sender: TObject);var  Search:string;beginSearch:= EditSearch.Text;  if (EditSearch.Text <> '')then  begin    Begin      with Query do      begin        Close;        SQL.Clear;        SQL.Add('Select * from cliente where cliente LIKE' + QuotedStr('%' + Search + '%'));        Open;    end;    //PInfo.Visible := true;  end;end;end;procedure TFormMain.EditRedeChange(Sender: TObject);beginEditRota.Text := 'route add ' + EditRede.text + ' mask 255.255.255.0 ' + EditGateway.Text;end;procedure TFormMain.TCorrigirRotaTimer(Sender: TObject);beginEditRota.Text := 'route add ' + EditRede.text + ' mask 255.255.255.0 ' + EditGateway.Text;TCorrigirRota.Enabled := false;end;procedure TFormMain.BtnRotaClick(Sender: TObject);begin//WinExec(PChar('cmd /c route add 10.1.25.0 mask 255.255.255.0 192.168.0.254'),SW_SHOWNORMAL);//winexec('C:\rota.bat\',1);WinExec(PAnsiChar('cmd.exe /c route add 10.1.25.0 mask 255.255.255.0 192.168.0.254'), sw_normal); // Use /c para janela do prompt não permanecer aberta.end;end.

 

Link para o comentário
Compartilhar em outros sites

O resultado no seu computador é estranho e diferente do meu, aqui funcionou normal, pensei que você

talvez estivesse tentando passar variaveis no lugar dos comandos do CMD, mas o comando direto assim

deveria funcionar normalmente.

 

Acho que terá que aguardar alguém mais experiente lhe responder, não consegui achar o problema...

 

Mas Boa Sorte!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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