使用C#中的文件系统覆盖服务

时间:2015-02-13 09:58:13

标签: c# service

我开发了两个应用程序:

  1. 安装程序(安装服务)

  2. 升级(停止并覆盖已安装的服务)

  3. 当我运行升级时,我得到了异常

    "进程无法访问文件E:\ TF50 \ SSS Service \ DataModel.dll因为

    它被另一个进程使用"。

    这是我的示例代码:

    try
    
    {
    
    if (xmlnode.Item(1).InnerText.ToString() != "")
    
    {
    
     ServiceController sc = new ServiceController();
    
    sc.ServiceName = "RT60Service";
    
               richTextBox1.Invoke((MethodInvoker)delegate
               {
               richTextBox1.Text = richTextBox1.Text + "RT60WindowService Started" +
    
     " - " + DateTime.UtcNow + Environment.NewLine;
    
     });
    
    if (sc.Status == ServiceControllerStatus.Running)
    
    sc.Stop();
    
    
    fnUnZIP(xmlnode.Item(1).InnerText.ToString(), lstrHomeDirectory + 
    
    "RT60WindowsService", "RT60WindowService");
    
    sc.Refresh();
    
     if (sc.Status == ServiceControllerStatus.Stopped)
    
    {
    
    sc.Start();
    
    sc.Refresh();
    
    }
    
    richTextBox1.Invoke((MethodInvoker)delegate
    
    {
    
    richTextBox1.Text = richTextBox1.Text + "RT60WindowService Completed" + " - " + 
    
    DateTime.UtcNow + Environment.NewLine;
    
    richTextBox1.Text = richTextBox1.Text + "---------------------------------------
    
    ---------------------------------------------------------" + 
    
    Environment.NewLine;
    
    });
    
    }
    
    }
    
    catch (Exception ex)
    
    {
    
    richTextBox1.Invoke((MethodInvoker)delegate
    
    {
    
    richTextBox1.Text = richTextBox1.Text + ex.Message + Environment.NewLine;
    
    richTextBox1.Text = richTextBox1.Text + "RT60WindowService Failed" + " - " + 
    
    DateTime.UtcNow + Environment.NewLine;
    
    richTextBox1.Text = richTextBox1.Text + "---------------------------------------
    
    ---------------------------------------------------------" + 
    
    Environment.NewLine;
    
    });
    
    }
    
    finally
    
    {
    
    bgworker.ReportProgress(32);
    
    }
    

    现在我的问题是:'我们如何使用文件系统覆盖服务?'

    我被困在这里,请帮助我......

1 个答案:

答案 0 :(得分:0)

我怀疑问题是当您尝试替换文件时,您的服务仍在关闭。

之后

  sc.Stop();

您需要等到服务实际停止使用命令

sc.WaitForStatus(ServiceControllerStatus.Stopped);

sc.WaitForStatus(ServiceControllerStatus.Stopped, timeout);

请参阅 ServiceController.WaitForStatus Method on Msdn