Pergunta

O assunto não diz muito porque não é fácil questionar em uma linha. Eu tenho que executar alguns programas que li no registro. Eu tenho que ler de um campo onde alguém salva todos os caminhos e argumentos.
Eu tenho usado o System.diagnostics.processstartinfo definindo o nome do programa e seus argumentos, mas encontrei uma ampla variedade de argumentos que tenho que analisar para salvar o arquivo executável do processo em um campo e seus argumentos no outro.

Existe uma maneira de executar toda a string como está?

Foi útil?

Solução

Eu abordei isso da mesma maneira que o pôster acima, usando o cmd.exe com informações iniciais do processo.

Process myProcess = New Process;
myProcess.StartInfo.FileName = "cmd.exe";
myProcess.StartInfo.Arguments = "/C " + cmd;
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcess.StartInfo.CreateNoWindow = True;
myProcess.Start();
myProcess.WaitForExit();
myProcess.Close();

O CMD /C realiza o comando e termina. Waitforexit encerrará o processo se ele for por muito tempo.

Outras dicas

Existem vários, de fato.

  1. Você pode ligar para o cmd.exe com /c [sua linha de comando] como os argumentos. Isso faz com que o cmd.exe processe seu comando e depois pare.
  2. Você pode escrever o comando em um arquivo em lote e iniciá -lo.

E é claro que há a abordagem que você está adotando agora, a saber, analisando a linha de comando.

Quando 'Usashellexecute'não está definido, system.diagnostics.process chama CreateProcess ou CreateProcesSasUser Para realmente iniciar um programa (ele usa o segundo se você especificar um usuário/domínio/senha). E ambas as chamadas podem assumir o comando e o arquivo como um único argumento. De msdn:

O parâmetro LPApplicationName pode ser nulo. Nesse caso, o nome do módulo deve ser o primeiro token branco -alimido no espaço branco na string lpCommandline. ...

O nome do LPApplication mapeia o ProcessStartInfo.FileName e o LPCommandline Maps para os argumentos. Então você deve estar e apenas ir:

var processStartInfo = new ProcessStartInfo()
{
    UseShellExecute = false,
    Arguments = cmd
};
Process.Start(processStartInfo);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top