示例#1
0
        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());
            }
        }
示例#2
0
        private bool disposedValue = false; // 重複する呼び出しを検出するには

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // TODO: マネージ状態を破棄します (マネージ オブジェクト)。
                }

                // TODO: アンマネージ リソース (アンマネージ オブジェクト) を解放し、下のファイナライザーをオーバーライドします。
                process?.Dispose();
                // TODO: 大きなフィールドを null に設定します。
                process = null;

                disposedValue = true;
            }
        }