2011-06-22 41 views
0

我在註冊shell擴展的NSIS上編寫安裝程序。在重新啓動時安排regsvr32執行

在卸載和升級時,舊的擴展無法被刪除/覆蓋,因爲explorer.exe將其鎖定,並且排除了重新啓動該進程。

所以我提取使用不同的名稱,新的擴展,標誌着舊擴展爲刪除(卸載/升級),並重新命名新擴展爲原來的名稱通過的PendingFileRenameOperations註冊表項(僅升級)。到目前爲止,這工作正常。

問題是,我必須在啓動時註冊新的外殼組件,因爲PendingFileRenameOperations僅在重新啓動時有效。重新啓動後有沒有辦法安排regsvr32操作?

我不能依賴於通過蝙蝠執行上的RunOnce這樣做,因爲註銷/登錄也觸發的RunOnce操作。

在此先感謝。

回答

0

我發現解決此問題的最簡單方法是創建一個註冊表腳本,該腳本刪除所有相關的註冊表項和值。在(un-)安裝程序中運行註冊表腳本,併爲COM DLL安排「在啓動時刪除」。可能有更好的方法來做到這一點,但我還沒有找到它。

+0

「相關注冊表項」與所有註冊的shell擴展中的註冊鍵一起工作嗎?這樣做後你可以修改COM DLL嗎? 不過,這是一個想法。我會嘗試的。 – DiegoR