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

时间:2015-01-06 10:16:29

标签: c# .net winforms installshield

我有一个使用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流程包含一个记录第一行的行号的条目,所以我认为在这里发布冗长的方法不会有太多意义。

4 个答案:

答案 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对象并保持打开状态。