AppActive не работает в CScript, когда вызывается как процесс в C# - PullRequest
0 голосов
/ 25 апреля 2020

Я запускаю 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);
    }
}

Есть ли разница между этими двумя случаями?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...