2012-07-20 120 views
4

我有一個程序產品,它額外安裝外殼擴展到Windows資源管理器。它使用C#製作並使用.NET Framework v4.0。外殼擴展是通過使用regasm.exe在安裝過程中由Inno Setup安裝的。一切正常,直到我想安裝應用程序的更新版本。問題是我無法更新外殼擴展DLL,因爲它加載到資源管理器的內存。在安裝Inno Setup的顯示我下面的消息更新與Inno安裝程序的Windows資源管理器外殼擴展

enter image description here

它說,安裝需要終止Windows資源管理器,因爲它使用應該由安裝程序更新的文件。 它終止瀏覽器進程,但不會再啓動他。這是我的第一個問題。

其實我不想強制用戶關機瀏覽器。但我不知道如何從資源管理器的內存中卸載託管shell。如果通過regasm.exe DLL卸載它仍然保留在內存中。事實上,我甚至無法找到發生這種檢查的地方,因爲我收到了已經安裝的源碼。

Inno Setup的文件在用(IssProc.dll)加載項沒有幫助,因爲儘快通過此加載項終止Windows資源管理器,資源管理器立即重新啓動。

我該如何解決這個問題?我怎樣才能更好的用戶體驗更新外殼擴展DLL? 也許有人可以給我一個提示,檢查正在使用的文件的代碼放在哪裏?

O和BTW我正在使用Windows 7 x64。

+0

隨着*也許有人可以給我一個提示,其中檢查使用中的文件的代碼放在*你的意思是在InnoSetup源代碼?或者您打算展示如何使用該解決方案的示例腳本? – TLama 2012-07-21 00:14:58

+0

我的意思是Inno Setup源代碼。我無法找到類似於上面指定的文件驗證的任何內容。我們只在Inno Setup中檢查.NET v4。可能這是由Inno Setup引擎進行的檢查? – 2012-07-21 08:55:28

+0

我看到由安裝嚮導進行的檢查 – 2012-07-21 09:09:02

回答

2

在文件條目中使用restartreplace標誌。從參考:

當現有文件需要被替換,並且它是由另一個正在運行的進程使用(鎖定) ,安裝程序將默認顯示錯誤 消息。 此標誌指示安裝程序(通過調用MoveFileEx 或創建WININIT.INI中的條目),而不是註冊該文件是 替換下一次重新啓動系統。發生這種情況時,將在 安裝過程結束時提示用戶 重新啓動其計算機。

所以使用此標誌不會導致嚮導詢問使用文件終止應用程序,但安排文件更新到下次重新啓動,並提示用戶在安裝結束時重新啓動計算機,什麼是我的意見相當用戶友好和常用。

+1

Thx。像瑞士鐘錶一樣工作。 – 2012-07-21 09:40:48

+0

IIRC,它仍然會提供RestartManager提示,但如果它仍在使用中,則繼續進行替換以重新啓動。你需要爲此調整過濾器。 – Deanna 2012-07-22 18:33:44

0

要禁用提示,您應該簡單地在[Setup]中設置「CloseApplications = no」。 但是如果您確定需要更換,但仍然需要使用[File]中的restartplace標誌。

+0

這將有效地執行與'restartreplace'相同的操作。 – TLama 2014-12-15 09:08:31

+0

我希望他們是,所以我可以通過這種方式直接解決同一問題,但運氣不好,他們不是我的考驗。我不得不花更多的時間做更多的嘗試。 :(我是通過最新的Inno setup 5.5.5(a)完成的。 – Bingley 2014-12-16 08:17:24

相關問題