Я запускаю VBS-файл как ScriptHost, который выполняет сценарий ввода во время выполнения.
Do While True
Dim script
script = Wscript.StdIn.ReadLine
On Error Resume Next
Execute(script)
If Err.Number <> 0 Then
msgbox "ERROR"
End If
Err.Clear
On Error Goto 0
Loop
Вот код процесса
public class ScriptExecutor : IDisposable
{
private Process cscriptProcess;
public ScriptExecutor()
{
var commandArgment = "//Nologo \"c:\\Sample\\HostScript.vbs\"");
ProcessStartInfo pb = new ProcessStartInfo("cscript.exe", commandArgment);
pb.RedirectStandardOutput = true;
pb.RedirectStandardInput = true;
pb.RedirectStandardError = true;
pb.UseShellExecute = false;
pb.CreateNoWindow = true;
this.process = new Process();
this.process.StartInfo = pb;
this.process.Start();
}
public virtual void ExecuteScript(string newScript)
{
this.cscriptProcess.StandardInput.WriteLine(newScript);
this.cscriptProcess.StandardInput.Flush();
}
}
Когда я создаю экземпляр ScriptExecutor непосредственно перед Вызван ExecuteScript, скрипт ниже работает нормально. Однако, когда я создаю экземпляр ScriptExecutor в другом методе, скрипт не работает.
Set objWshShell = CreateObject("Wscript.shell")
objWshShell.AppActive "MyApp"
Вот код, который работал.
public class RunScript
{
private ScriptExecutor executor = null;
public RunScript()
{
}
public void Execute(string script)
{
executor = new ScriptExecutor();
executor.ExecuteScript(script);
}
}
А вот код, который не работал , MyApp не имеет фокуса, а мигает на панели задач.
public class RunScript
{
private ScriptExecutor executor = null;
public RunScript()
{
executor = new ScriptExecutor();
}
public void Execute(string script)
{
executor.ExecuteScript(script);
}
}
Есть ли разница между этими двумя случаями?