我已为应用程序添加更新程序(Myapp.exe)。当我启动 Myapp.exe 时,它会检查新的可用版本并根据用户说明将其下载到 Windows Temp目录。将更新下载到Temp目录后,新程序 replacer.exe 运行,负责获取 Myapp.exe ,终止其进程,删除 Myapp.exe < / strong>并将(Myapp.exe)的新版本从Temp目录复制到Myapp.exe旧路径。 replacer.exe 包含以下代码。
class Program
{
static void Main(string[] args)
{
try
{
Process myProcess = Process.GetProcessesByName("Myapp")[0];
myProcess.Kill();
File.Delete(args[0]);
File.Copy(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\Temp\\Myapp.exe", args[0], false);
}
catch (Exception e)
{
Console.Write(e.ToString() + "");
//return;
}
//Console.Write( "Success");
try
{
Process.Start(args[0]);
}
catch (Exception es)
{
Console.Write(es.ToString() + "");
//return;
}
Console.ReadLine();
}
}
但replacer.exe无法删除Myapp.exe并提供异常 System.UnauthorizedAccessException 。这意味着replacer.exe在删除Myapp.exe时无法访问Myapp.exe给出的路径 注意:我还以管理员和普通用户身份运行UserAccount,Myapp.exe和replacer.exe。 我该如何解决呢。请帮我。 提前致谢。 。
答案 0 :(得分:3)
流程结束需要一段时间:Process.Kill()
仅告诉流程停止,但不希望它真正完成。
您需要引入一个具有短延迟的循环并检查该进程是否实际终止。
使用属性Process.HasExited
进行检查:MSDN上的文档:http://msdn.microsoft.com/en-us/library/system.diagnostics.process.hasexited.aspx。
答案 1 :(得分:1)
您是否真的检查了args[0]
的内容? File.Delete
如果缺少必要的权限,则不会抛出UnauthorizedAccessException
;如果路径指向目录或只读文件,也可以抛出它。