C#中如何开启另一个程序运行

下面的例子是,开启以Sql server的安装进程运行:

private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                Process tmpSqlInstaller = new Process();
                string tmpFileName =
                    @"G:\StudyFolder\CSharpPractice\ConsoleAppEmbedingSqlServer\ConsoleAppEmbedingSqlServer\SqlExpressSetUp\setup.exe";
                string tmpArguments =
                    @"/IACCEPTSQLSERVERLICENSETERMS "
                    + "/Q "
                    //+ "/Hideconsole "
                    + "/ACTION=Install "
                    + "/FEATURES=SQLEngine,Replication,SDK "
                    + "/INSTANCENAME=SQLEXPRESS_1 "
                    + "/AddCurrentUserAsSQLAdmin "
                    + "/SQLSVCACCOUNT=\"NT AUTHORITY\\SYSTEM\" "
                    + "/AGTSVCACCOUNT=\"NT AUTHORITY\\Network Service\"";
                ProcessStartInfo tmpStartInfo = new ProcessStartInfo(tmpFileName, tmpArguments);

                //---
                tmpSqlInstaller.StartInfo = tmpStartInfo;
                tmpSqlInstaller.EnableRaisingEvents = true;
                tmpSqlInstaller.Exited += new EventHandler(tmpSqlInstaller_Exited); //这里对于要依赖进程安装结果而执行相应逻辑的程序很有用
                
                tmpSqlInstaller.Start();

                MessageBox.Show("i have started");
            }
            catch (Exception allE)
            {
                MessageBox.Show(allE.ToString());
            }
        }

        void tmpSqlInstaller_Exited(object sender, EventArgs e)
        {
            //MessageBox.Show("Process has exited");
            System.Diagnostics.Debug.WriteLine("Process has exited");
            Process tmpP = sender as Process;
            if (tmpP != null)
            {
                System.Diagnostics.Debug.WriteLine(Convert.ToString(tmpP.ExitCode,16));// tmpP.ExitCode.ToString());
            }
        }

 

注:

在开启另一个进程运行的程序,如果那个程序发生任何错误是不会抛回到调用进程的,

能在调用进程中唯一感知开启进程状态的部分就是Exit事件的处理方法中,另如果开启了错误重定向功能,

也可以在调用进程中,记录开启进程运行时产生的错误日志。

所以,在 主调进程代码处添加try...catch语句显然无法做到捕捉被调进程中放生的错误。

调用进程=主调进程

开启进程=被调进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值