2013-10-03 51 views
4


我的程序突然存在,找不到原因,但我知道代码的哪个部分会导致此问题。我会尽量解释发生了什么...

首先,我用下面的命名空间在我的窗户形式,除了常见的:当我启动另一个进程时,程序突然退出

using System.Diagnostics; 
using System.IO; 
using System.Data.OleDb; 

我有检索当前的汽车增量的自定义函数通过寻找最大的ID和一个增加它的行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); 
} 

问题:
检索最后questionNo并打开Word文档中的代码或者单独工作正常。我的意思是当我在form_load内部调用getCurrentQuestionNo()时,它的工作原理并没有问题。当我禁用form_load中的getCurrentQuestionNo()函数时,启动word过程的代码正常工作。
但是,当我在form_load中调用getCurrentQuestionNo(),然后单击该按钮启动文字处理时,仍然一切正常,但在几秒钟后突然出现,整个程序退出时没有任何消息,该文字仍在运行。这就像我从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(); 

我把他们两个单独的按钮单击事件中。再次,每个按钮单独工作时都能正常工作,但单击button1,然后button2会使程序崩溃!
我真的很迷茫... :(
有趣的是,有时程序本身并没有退出,一切继续合作,但在这种情况下,“vshost.exe已停止工作”当我关闭出现对话框程序正常问题详细信息显示ntdll.dll是故障模块,有时是clr.dll 我也收到了:Fault Module Name:StackHash_4d02

+0

未处理的异常。 –

+0

输出窗口中的任何内容? –

+1

我已经看到这发生在它通常之前,当你在构造函数之外设置一个字段和它的错误,因为这是在构造函数/方法之外,它还没有实例化类,所以正常的错误处理程序不能踢,整个程序关闭 – MikeT

回答

0

我非常怀疑你的问题是损坏的DLL。更可能是丢失的DLL或32/64位不匹配,请下载Dependency Walker的副本并将其与您的应用程序一起运行如果您缺少DLL或Windows发现的DLL与体系结构不匹配,它会告诉您。只需确保并为您的应用下载正确的版本(32对64位)。

相关问题