2010-11-14 104 views
1

幫助安裝未安裝和安裝一個可執行文件foo.exe的,即時通訊歌廳下面的錯誤NSIS腳本,而不殺死探險

Error opening file for writing 
click abort to stop the installation 

我能找到一些文件被沒有被刪除,而未安裝。 通過使用進程資源管理器,我可以看到explorer.exe仍然引用了foo.exe的一些dll,即使在註銷它們之後也是如此。

並殺死explorer.exe並在卸載時解決此問題時再次重新啓動它。 (通過NSIS安裝腳本)。

或通過在腳本中設置rebook ok標誌並要求用戶在再次安裝foo.exe之前重新啓動他的機器。

我不認爲它是一個很好的解決方案,要求用戶在卸載後重新啓動他的機器。

誰能幫我我如何能確保我的安裝過程會罰款,而不是重新啓動Explorer.exe的

+0

你是如何執行卸載程序的? – kichik 2010-11-14 13:40:50

+0

我有卸載程序。我用UAC插件執行所有的權限..它不是我的UAC的問題(使用XP) – Anees 2010-11-14 13:48:38

+0

我其實並沒有想到UAC,而是你的執行方法不是等待卸載程序正確完成,而只是繼續安裝程序,當它真的完成。這是NSIS卸載程序非常常見的問題。 – kichik 2010-11-14 13:55:08

回答

1

對於已註冊的外殼擴展實在是沒有乾淨的方式來刪除DLL的除了強制重啓(或加註銷如果他們在HKCU \ Software \ Classes下注冊)

如果這還不夠好,你基本上有兩種選擇:

  • 重命名的.dll文件,之後再刪除它
  • <HACKALERT>進樣調用CoFreeUnusedLibraries()到每一個有你的DLL進程中的線程加載</HACKALERT>

就殺死並重新啓動資源管理器是不是一個真正的選擇,因爲你不知道,如果其他一些程序也使用您的外殼擴展。

+0

安德斯,試圖重命名的殘留物存在一個卸載,但無法成功的。你能否給我提供任何示例代碼片段.. – Anees 2010-11-20 10:58:27