2010-06-14 52 views
3

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

回答

1

什麼操作系統?如果這是Windows,那麼我擔心你錯誤地交換正在執行的.exe文件 - 所有正在運行的程序都被Windows內核中的虛擬內存管理器鎖定。完全可能的是,您有一些.NET庫在後臺執行重定向,使其看起來好像新文件已就位,但只有通過該庫的文件訪問纔會受到影響。

編輯:據我所知,Windows拒絕企圖刪除或重命名不僅映射到內存,但也是所有父目錄的可執行文件。由於您使用的是Vista,所以實際上您可能會看到外觀的影響 - 對於非管理員程序,Windows將重定向寫入操作,然後將Windows和Program Files目錄讀取到每個用戶的虛擬區域。如果您通過任何非提升手段啓動該程序,則可能實際上正在虛擬區域中運行該應用程序的副本。安裝程序服務(MSIEXEC)以完全提升的管理權限運行,因此它不受重定向的影響。因此,我認爲Windows安裝程序會覆蓋C:\ Program Files \中的版本,而您的應用程序會從%USERPROFILE%\ AppData \ Local \ VirtualStore \ Program Files \任何覆蓋層中看到版本,該版本保持不變。通常情況下,如果「真實」目錄中的版本發生變化,它將具有比覆蓋版本更新的修改時間,因此將使用「真實」版本。但是,如果安裝過程保留了修改時間,那麼覆蓋層可能會有更近的時間並繼續使用。

+0

嗨,本。它運行在Windows Vista(.NET 3.5)上。我知道加載到內核中的程序無法交換,但它看起來好像文件系統上的.exe文件可以。我似乎可以刪除它或重命名它而不影響程序的運行。這是否意味着即使在刪除它之後,正在運行的程序仍會將其視爲在那裏? – 2010-06-14 13:39:24

+0

道歉本,但我需要糾正自己。我可以重命名正在運行的進程的.exe,但無法刪除它們 - 我重新測試了幾次。 Windows安裝程序是什麼更新文件,似乎能夠刪除舊版本,並把新的(通過資源管理器查看時)。正如你所說,這可能是一個façade。 – 2010-06-14 13:56:08

+0

這很有趣。你是如何開始這個計劃的,路徑是什麼?我在回答中添加了更多信息,因爲評論太長。 – 2010-06-15 00:05:05

1

我想一些緩存是在幕後發生的。

爲什麼不避開這個問題,只需創建一個名爲restart.txt的空文本文檔,並在文件存在時重新啓動?

+0

感謝您的建議 - 這可能是我最終要做的。我也很好奇知道幕後發生了什麼。 – 2010-06-14 13:26:39

相關問題