Não utilizo C# com frequência, porém, preciso modificar alguns códigos, que utilizam:
Process new_process = new Process();
new_process.StartInfo.FileName = "mytool.exe";
Agora, tenho que fazer uma chamada, porém com uma lista bastante grande de opções de linha de comando, algumas das quais contêm espaços e precisam ser citadas.
Então, eu vi que existe isto: https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.processstartinfo.argumentlist?view=net-7.0#system-diagnostics-processstartinfo-argumentlist
...
// or if you prefer collection property initializer syntax:
var info = new System.Diagnostics.ProcessStartInfo("cmd.exe")
{
ArgumentList = {
"/c",
"dir",
@"C:\Program Files\dotnet"
}
};
// The corresponding assignment to the Arguments property is:
var info = new System.Diagnostics.ProcessStartInfo("cmd.exe")
{
Arguments = "/c dir \"C:\\Program Files\\dotnet\""
};
Eu adoraria usar ArgumentList - o problema é que, quando tento o preenchimento automático no Visual Studio new_process.StartInfo.
, recebo apenas Arguments
não ArgumentList
; e acho que este aplicativo que estou tentando modificar tem como alvo o .NET 4.6 - e a página acima diz para ArgumentList, que se aplica a:
.NET Core 2.1, Núcleo 2.2, Núcleo 3.0, Núcleo 3.1, 5, 6, 7, 8
Então, acho que estou sem sorte em termos de uso de ArgumentList aqui (não meu aplicativo, então realmente não posso tomar a decisão de alterar a versão principal, se esse for realmente o problema).
Então, se for esse o caso, existe algum tipo de classe em C# que seria essencialmente um contêiner de lista/matriz para strings, e que pode ter um método "join_quoted" ou algo assim, para que ele una os elementos da matriz com espaços , e cita os elementos que precisam ser citados - então, por
- um array de entrada
{"/c", "dir", @"C:\Program Files\dotnet"}
, posso obter automaticamente - uma string juntada entre aspas de saída, que aqui seria
"/c dir \"C:\\Program Files\\dotnet\""
...?
Eu estava enfrentando exatamente o mesmo problema ao usar o .NET 4.6 e, como dito no link fornecido pelo comentário de @NineBerry, a regra de análise é complexa. Acabei criando minha própria classe adaptando a lógica desse método do repositório dotnet/runtime.
O método é demonstrado neste caso de teste , que deve atender a sua necessidade também.