我有一个使用installshield安装的应用程序。在调试和使用VS发布时,应用程序运行正常,但是当我运行已安装的版本时,DoWork进程不会受到影响,我似乎可以确定原因。
我已添加下面的代码,因为您可以看到我已添加代码以写入文本文件以进行调试。
在“Line:281”之前直接记录条目“Line:278”。问题是DoWork应该在这些代码行的那些和日志条目之间运行。这一切在调试过程中都能正常工作。
从这些日志中可以明显看出,在运行已安装的版本时,DoWork(包含主代码)永远不会被命中。
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
File.AppendAllText("C:\\Users\\Jamie\\Desktop\\errorloghardware.txt", "Line:278" + Environment.NewLine);
backgroundWorker1.RunWorkerAsync(txtTerminal.Text);
File.AppendAllText("C:\\Users\\Jamie\\Desktop\\errorloghardware.txt", "Line:281" + Environment.NewLine);
}
private void button2_Click(object sender, EventArgs e)
{
this.backgroundWorker1.CancelAsync();
}
private void MainForm_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync(txtTerminal.Text);
File.AppendAllText("C:\\Users\\Jamie\\Desktop\\errorloghardware.txt","Line:292" + Environment.NewLine);
}
DoWork流程包含一个记录第一行的行号的条目,所以我认为在这里发布冗长的方法不会有太多意义。
答案 0 :(得分:2)
您的后台工作人员DoWork可能有例外。检查RunWorkerCompleted事件处理程序中的e.Error
属性。
答案 1 :(得分:1)
你真的有硬编码的目录引用吗?你应该做这样的事情:
Environment.GetFolderPath(Environment.SpecialFolder.Desktop))
使用InstallShield创建安装程序并不是很相关。您需要了解应用程序的确切依赖关系,并在部署逻辑中处理此问题。如果您依赖DLL,请确保部署它。
在这种情况下,假设存在某个文件夹并且登录用户可以访问它,这是不合适的。
答案 2 :(得分:0)
我想这将是找到错误的方法。否则工作尚未完成
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error == null)
{
richBox1.Text=ex.Message;
}else{
try{
File.AppendAllText("C:\\Users\\Jamie\\Desktop\\errorloghardware.txt", "Line:278" + Environment.NewLine);
reset_all_variables()
backgroundWorker1.RunWorkerAsync(txtTerminal.Text);
File.AppendAllText("C:\\Users\\Jamie\\Desktop\\errorloghardware.txt", "Line:281" + Environment.NewLine);
}catch (Exception ex)
{
richBox1.Text=ex.Message;
}
}
答案 3 :(得分:0)
使用互斥锁同步对文件的访问。当您尝试从后台任务编写时,可能是文件忙于主任务。或者只是定义全局Stream
对象并保持打开状态。