我开发了两个应用程序:
安装程序(安装服务)
升级(停止并覆盖已安装的服务)
当我运行升级时,我得到了异常
"进程无法访问文件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);
}
现在我的问题是:'我们如何使用文件系统覆盖服务?'
我被困在这里,请帮助我......
答案 0 :(得分:0)
我怀疑问题是当您尝试替换文件时,您的服务仍在关闭。
之后
sc.Stop();
您需要等到服务实际停止使用命令
sc.WaitForStatus(ServiceControllerStatus.Stopped);
或
sc.WaitForStatus(ServiceControllerStatus.Stopped, timeout);