后台工作 安装应用程序后未运行工作进程
本文关键字:工作 运行 进程 应用程序 安装 后台 | 更新日期: 2023-09-27 18:36:18
我有一个使用installshield安装的应用程序。该应用程序在调试期间和使用VS发布时工作正常,但是当我运行已安装的版本时,DoWork进程不会受到打击,我似乎可以确定原因。
我已经添加了下面的代码,如您所见,我已经添加了代码以写入文本文件进行调试。
条目 "Line:278" 直接记录在 "Line:281" 之前。问题是 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 流程包括一个条目,用于在其第一行上记录行号,因此我认为在这里发布冗长的方法没有多大意义。
您的后台工作人员 DoWork 中可能有一个例外。检查 RunWorkerDone 事件处理程序中的 e.Error
属性。
你真的有硬编码的目录引用吗? 你应该做这样的事情:
Environment.GetFolderPath(Environment.SpecialFolder.Desktop))
使用InstallShield创建安装程序并不重要。 相关的是,您需要了解应用程序的确切依赖项,并在部署逻辑中处理此问题。 如果依赖于 DLL,请确保部署它。
在此方案中,假设某个文件夹存在并且登录用户有权访问它是不合适的。
我想这将是查找错误的方法。否则工作尚未完成
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;
}
}
使用互斥锁同步对文件的访问。当您尝试从后台任务写入时,文件可能正忙于主任务。或者简单地定义全局Stream
对象并使其保持打开状态。