当 startet 退出事件时,在 C# 中启动 sqlcmd 进程不起作用

Posted

技术标签:

【中文标题】当 startet 退出事件时,在 C# 中启动 sqlcmd 进程不起作用【英文标题】:Starting sqlcmd process in C# doesn't work when startet with exited event 【发布时间】:2019-07-24 14:14:58 【问题描述】:

为什么这段代码有效?

Process sql = Process.Start("sqlcmd.exe", param);
sql.WaitForExit(21600000);

但是当我运行这段代码时没有任何反应:

        Process sql = new System.Diagnostics.Process();
        sql.EnableRaisingEvents = true;
        sql.Exited += new EventHandler(sql_Exited);
        sql.StartInfo.FileName = @"sqlcmd.exe";
        sql.StartInfo.Arguments = param;
        sql.Start();

        this.Dispatcher.Invoke((Action)(() =>  I_loader.Visibility = Visibility.Visible; )); 

退出事件:

        private void sql_Exited(object sender, System.EventArgs e)
        
            eventHandled = true;
            this.Dispatcher.Invoke((Action)(() =>  I_loader.Visibility = Visibility.Hidden; ));            
        

变量参数的值如下:

-S .\\SQLEXPRESS -d mydatabase -v db_src = \"c:\\temp\\update.bak\" -i db\\update.sql -o \"C:\\myprogram\\bin\\Debug\\log\\log_update.txt\"

【问题讨论】:

【参考方案1】:

现在可以使用此代码。不过,我真的不知道为什么或有什么不同。

   Process sql = new Process();   

   sql.StartInfo.CreateNoWindow = true;
   sql.StartInfo.UseShellExecute = true;
   sql.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
   sql.StartInfo.FileName = @"sqlcmd.exe";
   sql.StartInfo.Arguments = param;

   sql.EnableRaisingEvents = true;
   sql.Exited += new EventHandler(sql_Exited);
   sql.Start();

【讨论】:

以上是关于当 startet 退出事件时,在 C# 中启动 sqlcmd 进程不起作用的主要内容,如果未能解决你的问题,请参考以下文章