我有一个程序在c#中执行,有时通过将exe交换到新的程序来更新。我希望程序定期检查它是否已更新,如果有,请重新启动。我使用下面的函数来做到这一点。当程序开始是使用GetProductVersion(exe_name)当前版本FileVersionInfo.GetVersionInfo获取旧版本的exe在运行时交换
exe_name被设置为正在更新的可执行文件的名称
public static bool DoINeedToRestart(string exe_name)
{
Version cur_version = new Version(MainProgram.StartVersion);
Version file_version = new Version(GetProductVersion(exe_name));
MessageBox.Show("Comparing cur_version " + cur_version.ToString() + " with " + file_version.ToString());
if (file_version > cur_version)
{
return true;
}
return false;
}
public static string GetProductVersion(string path_name)
{
FileVersionInfo myFI = FileVersionInfo.GetVersionInfo(path_name);
return myFI.FileVersion;
}
MainProgram.StartVersion设置。
我有的问题是一旦MainProgram.exe文件已经更新(我通过查看文件属性并检查文件版本来手动验证),GetProductVersion仍然返回旧的文件版本,我不知道为什么!任何帮助是极大的赞赏。我使用.Net 3.5运行Windows Vista。
嗨,本。它运行在Windows Vista(.NET 3.5)上。我知道加载到内核中的程序无法交换,但它看起来好像文件系统上的.exe文件可以。我似乎可以删除它或重命名它而不影响程序的运行。这是否意味着即使在删除它之后,正在运行的程序仍会将其视为在那里? – 2010-06-14 13:39:24
道歉本,但我需要纠正自己。我可以重命名正在运行的进程的.exe,但无法删除它们 - 我重新测试了几次。 Windows安装程序是什么更新文件,似乎能够删除旧版本,并把新的(通过资源管理器查看时)。正如你所说,这可能是一个façade。 – 2010-06-14 13:56:08
这很有趣。你是如何开始这个计划的,路径是什么?我在回答中添加了更多信息,因为评论太长。 – 2010-06-15 00:05:05