当我启动另一个进程时,程序会突然退出
本文关键字:程序 突然 退出 启动 另一个 进程 | 更新日期: 2023-09-27 18:33:51
我的程序突然存在,我找不到原因,但我知道代码的哪些部分导致了这个问题。我会试着解释会发生什么...
首先,除了常见的命名空间之外,我还在 windows 窗体中使用以下命名空间:
using System.Diagnostics;
using System.IO;
using System.Data.OleDb;
我有一个自定义函数,它通过查找最大 ID 并将其递增 1 来检索当前自动递增行 ID:
void getCurrentQuestionNo()
{
//calculate current questionNo based on DB Info
classDataLayer DL = new classDataLayer();
OleDbCommand cmd = new OleDbCommand();
cmd.CommandText = "SELECT MAX([questionID]) FROM questions";
DataSet ds = DL.select(cmd);
questionNo = Convert.ToInt32(ds.Tables[0].Rows[0][0]) + 1;
}
此函数在函数内部启动form_load以设置一个名为 questionNo 的全局变量供以后使用。
此外,我有以下代码来打开Microsoft Word应用程序的实例。此代码放置在按钮的单击事件中:
try
{
//copy an instance of empty question template to Temp folder
File.Copy(@"Templates'EmptyQuestion.docx", @"Temp'TempQuestion.docx", true);
//launch ms-word to open the document
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "WINWORD.EXE";
startInfo.Arguments = @"Temp'TempQuestion.docx";
Process.Start(startInfo);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
问题:
用于检索最后一个问题"否"和"打开word文档"的代码中的任何一个都可以单独工作。我的意思是当我在里面调用getCurrentQuestionNo((时form_load它可以工作并且没有问题。当我在form_load中禁用getCurrentQuestionNo((函数时,用于启动word进程的代码工作正常。
但是,当我在form_load中调用getCurrentQuestionNo((,然后单击按钮启动word进程时,仍然一切正常,但突然几秒钟后整个程序退出没有任何消息,单词保持运行。就像我从Visual Studio IDE点击了"停止"按钮一样。
可能出了什么问题?
这显示在输出窗口中:
类型"System.IO.IOException"的第一次机会异常发生在mscorlib中.dll
程序"[5032] test.vshost.exe:程序跟踪"已退出,代码为 0 (0x0(。
程序"[5032] test.vshost.exe:托管 (v4.0.30319("已退出,代码为 -2147483645 (0x80000003(。
我测试了很多情况,任何使用oleDB以及使用过程都会导致相同的问题。我减少了我的代码如下:
用于检索上次自动增量 ID 的代码:
OleDbConnection con1 = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=db.accdb");
OleDbCommand cmd1 = new OleDbCommand("SELECT MAX([questionID]) FROM questions", con1);
con1.Open();
txtID.Text = cmd1.ExecuteScalar().ToString();
con1.Close();
以及用于启动进程的代码:
Process p = new Process();
p.StartInfo.FileName = "notepad.EXE";
p.Start();
我将它们放在两个单独按钮的点击事件中。同样,当每个按钮单独单击时,每个按钮都可以正常工作,但单击按钮 1 然后单击按钮 2 会使程序崩溃!!
我真的很困惑... :(
有趣的是,有时程序不会自行退出,一切都继续工作,但是在这种情况下,当我正常关闭程序时会出现"vshost.exe已停止工作"对话框。问题详细信息显示 ntdll.dll 是故障模块,有时是 clr.dll。我也得到这个:故障模块名称:StackHash_4d02
我非常怀疑你的问题是损坏的DLL。 我会说这更有可能是缺少 DLL,或者 32/64 位不匹配。 下载依赖项查看器的副本,并针对你的应用运行它。 如果您缺少 DLL 或 Windows 发现的 DLL 与体系结构不匹配,它会告诉您。 只需确保并为您的应用程序下载正确的版本(32 与 64 位(。