当 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 进程不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 应用程序退出时清理非托管 C++ 线程

当应用程序在 Cordova 中退出时会发生啥事件?

C#中,运行程序时提示:无法直接启动还有类库输出类型的项目?

C# FileSystemWatcher - 多个事件

C# - 使用 feck 的 TLS / SSL Websockets

关闭事件处理程序 C#