public override void SaveNew(TaskInstance ti) { var ph = GetProcessRecord(ti.ProcessInstanceId, true); if (ph == null) { //new instance ph = new ProcessHolder { ProcessInstance = ti.ProcessInstanceId, State = RecordState.New, IsForUpdate = true, DbVersion = null, TaskInstances = new List <TaskInstance>() }; ph.TaskInstances.Add(ti); _cache[ph.ProcessInstance] = ph; } else { var i2 = ph.TaskInstances.FindIndex(x => x.InstanceId == ti.InstanceId); if (i2 >= 0) { throw new Exception("Task already exists: " + ti.InstanceId); } ph.TaskInstances.Add(ti); if (ph.State == RecordState.Unmodified) { ph.State = RecordState.Modified; } } }
public void StandardInput() { var handle = ProcessHolder.SpawnWithRedirect("sort.exe", "", true, true, true); Assert.AreNotEqual(ProcessHolder.INVALID_HANDLE, handle); ProcessHolder.SetCreateNoWindow(handle, true); ProcessHolder.Start(handle); //ソート対象の文字列 ProcessHolder.WriteLineStandardInput(handle, "xyz"); ProcessHolder.WriteLineStandardInput(handle, "abc"); ProcessHolder.WriteLineStandardInput(handle, "3"); //Ctl-c 相当 ProcessHolder.CloseStandardInput(handle); ProcessHolder.WaitForExit(handle); { var textOutput = ProcessHolder.ReadStandardOutputAsString(handle); Assert.AreEqual("3\nabc\nxyz", textOutput); } { var textError = ProcessHolder.ReadStandardErrorAsString(handle); Assert.AreEqual("", textError); } ProcessHolder.Destroy(handle); }
public void SpawnWithRedirect() { var has_output = false; { var handle = ProcessHolder.SpawnWithRedirect("cmd.exe", "/c dir c:\\", true, true); Assert.AreNotEqual(ProcessHolder.INVALID_HANDLE, handle); ProcessHolder.SetCreateNoWindow(handle, true); ProcessHolder.Start(handle); var exit = false; while (exit == false) { exit = ProcessHolder.HasExited(handle); // //標準出力と標準エラーを取得します。 // if (ProcessHolder.ReadStandardOutputAsString(handle) != "") { has_output = true; } if (ProcessHolder.ReadStandardErrorAsString(handle) != "") { has_output = true; } } // //残りの標準出力とエラーを取得します。 // var text = ProcessHolder.ReadStandardOutputAsString(handle); while (text != "") { text = ProcessHolder.ReadStandardOutputAsString(handle); has_output = true; } text = ProcessHolder.ReadStandardErrorAsString(handle); while (text != "") { text = ProcessHolder.ReadStandardErrorAsString(handle); has_output = true; } // //終了処理 // ProcessHolder.Destroy(handle); } //出力があるはず Assert.AreEqual(true, has_output); }
public void ProcessKill() { var handle = ProcessHolder.SpawnWithRedirect("notepad.exe", "", false, false); Assert.AreNotEqual(ProcessHolder.INVALID_HANDLE, handle); ProcessHolder.Start(handle); //少し待ってからプロセスをキルする System.Threading.Thread.Sleep(1000); ProcessHolder.Kill(handle); ProcessHolder.Destroy(handle); }
protected ProcessHolder LoadProcessRecord(string instanceId, bool forUpdate) { var ph = new ProcessHolder { State = RecordState.Unmodified, IsForUpdate = forUpdate }; using (var cmd = _ses.Connection.CreateCommand()) { cmd.CommandText = string.Format("select instance_id, definition_id, version, task_instance_data from ProcessInstance {1} where instance_id='{0}'", instanceId, forUpdate ? "with(updlock,rowlock)" : "with(rowlock)"); using (var dr = cmd.ExecuteReader()) { if (!dr.Read()) { return(null); } ph.SerializedData = Convert.ToString(dr["task_instance_data"]); ph.ProcessInstance = Convert.ToString(dr["instance_id"]); ph.DbVersion = Convert.ToString(dr["version"]); } } ph.TaskInstances = DeserializeTaskList(ph.SerializedData); return(ph); }
protected ProcessHolder LoadProcessRecord(string instanceId, bool forUpdate) { var ph = new ProcessHolder { State = RecordState.Unmodified, IsForUpdate = forUpdate }; using (var cmd = _ses.Connection.CreateCommand()) { cmd.CommandText = string.Format("select instance_id, definition_id, version, task_instance_data from ProcessInstance {1} where instance_id='{0}'", instanceId, forUpdate ? "with(updlock,rowlock)" : "with(rowlock)"); using (var dr = cmd.ExecuteReader()) { if (!dr.Read()) return null; ph.SerializedData = Convert.ToString(dr["task_instance_data"]); ph.ProcessInstance = Convert.ToString(dr["instance_id"]); ph.DbVersion = Convert.ToString(dr["version"]); } } ph.TaskInstances = DeserializeTaskList(ph.SerializedData); return ph; }
public override void SaveNew(TaskInstance ti) { var ph = GetProcessRecord(ti.ProcessInstanceId, true); if (ph == null) { //new instance ph = new ProcessHolder { ProcessInstance = ti.ProcessInstanceId, State = RecordState.New, IsForUpdate = true, DbVersion = null, TaskInstances = new List<TaskInstance>() }; ph.TaskInstances.Add(ti); _cache[ph.ProcessInstance] = ph; } else { var i2 = ph.TaskInstances.FindIndex(x => x.InstanceId == ti.InstanceId); if (i2 >= 0) throw new Exception("Task already exists: " + ti.InstanceId); ph.TaskInstances.Add(ti); if (ph.State == RecordState.Unmodified) ph.State = RecordState.Modified; } }