public async Task Execute() { var psi = new ProcessStartInfo("cmd.exe", "/C \"" + ScriptPath + "\"") { UseShellExecute = false, WorkingDirectory = Directory.GetCurrentDirectory(), RedirectStandardError = true, RedirectStandardOutput = true, RedirectStandardInput = false, CreateNoWindow = true }; // exe_filesをパスに追加 var exeDir = Path.GetDirectoryName(typeof(UserScriptExecuter).Assembly.Location); // Specialized.StringDictionaryのkeyはcase insensitiveであることに注意 psi.EnvironmentVariables["path"] = exeDir + ";" + exeDir + "\\cmd" + ";" + psi.EnvironmentVariables["path"]; // パラメータを環境変数に追加 SetupEnv(psi.EnvironmentVariables); using (process = new NormalProcess(psi) { OnOutput = OnOutput }) { pipes.DisposeLocalCopyOfClientHandle(); await Task.WhenAll( process.WaitForExitAsync(), RunCommandHost()); } }
private bool disposedValue = false; // 重複する呼び出しを検出するには protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { // TODO: マネージ状態を破棄します (マネージ オブジェクト)。 } // TODO: アンマネージ リソース (アンマネージ オブジェクト) を解放し、下のファイナライザーをオーバーライドします。 process?.Dispose(); // TODO: 大きなフィールドを null に設定します。 process = null; disposedValue = true; } }