我有一個程序在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