后台工作 安装应用程序后未运行工作进程

本文关键字:工作 运行 进程 应用程序 安装 后台 | 更新日期: 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对象并使其保持打开状态。