У меня есть требование запустить процесс с использованием отражения. Ниже показан фрагмент кода, который я пытаюсь выполнить с помощью отражения.
Process newProcess = new Process();
ProcessStartInfo startInfo =new ProcessStartInfo(filepath);
startInfo.UseShellExecute = false;
startInfo.RedirectStandardError = true;
startInfo.CreateNoWindow=false;
newProcess.StartInfo = startInfo;
newProcess.Start();
newProcess.WaitForExit();
Компиляция: (Параметр «codeToExecute» имеет структуру класса с приведенным выше фрагментом кода, помещенным в метод)
private static CompilerResults CompileAndGetResult(SnippetInfo snippetInfo, string codeToExecute)
{
CompilerResults result = null;
using (Microsoft.CSharp.CSharpCodeProvider foo =
new Microsoft.CSharp.CSharpCodeProvider())
{
result = foo.CompileAssemblyFromSource(
new CompilerParameters(snippetInfo.References.ToArray())
{
GenerateInMemory = true
},
codeToExecute
);
}
return result;
}
Выполнение с использованием отражения:
var classType = result.CompiledAssembly.GetType(SnippetCodeGenerator.TypeName);
var classobj = Activator.CreateInstance(classType);
MethodInfo methodInfo = classType.GetMethod(SnippetCodeGenerator.MethodName);
object returnValue = methodInfo.Invoke(classobj, parameterArray);
Используя этот код, моя консоль не открывается. Если я удалю UseShellExecute и RedirectStandardError , Я смог увидеть консоль. Я также пробовал разные способы использования allocconsole, но, похоже, ничего не вышло.