可能這不是一個嚴格的WIX問題,但它應該是一個衆所周知的問題,與設置完善的最佳實踐有關。我在Google上找不到這些做法。使用WiX 3.6,Windows 7,Visual Studio 2008,但安裝必須支持Windows從XP到更新。必須在更改PATH後重新啓動
我正在安裝依賴於某些第三方DLL的COM對象。對象本身已經註冊好了,並且所有DLL都安裝在安裝文件夾中,安裝程序將此文件夾添加到系統的環境變量PATH
。代碼如下所示:
<Component Id="RequiredLibraries" Guid="$(var.RequiredLibrariesGUID)">
<?include redist.wxi?>
<Environment Id="PATH" Name="PATH" Value="[INSTALLDIR]" Permanent="no" Part="last" Action="set" System="yes" />
</Component>
在我的機器,我可以在安裝後立即使用對象,但在某些機器上,我必須重新啓動計算機。這次重啓很痛苦,我不知道爲什麼它是必要的,爲什麼只在某些機器上。我可以<ScheduleReboot After="InstallFinalize"/>
,但我希望有更好的解決方案。因此,請隨時回答以下任何問題:
此問題的最佳常見做法是什麼?我無法將所有東西都打包到一個DLL中,所以我需要一個針對多個DLL的解決方案。
我能做些什麼來啓用COM對象的使用(通過使更改爲
PATH
對系統的其他部分可見),而不訴諸重新啓動,或用戶重新登錄或重新啓動資源管理器? Windows安裝程序是否廣播WM_SETTINGCHANGE
消息?我應該在自定義操作中播放它嗎?我該如何檢測並要求用戶只有在需要時才重新啓動/重新登錄,而不是總是如此? (某些機器不需要重新啓動)
我該如何安排比重新啓動更輕鬆的工作?
流程會在開始時讀取環境。你必須重新啓動過程。這不需要重新啓動,而是需要註銷/登錄週期。但是有些東西就像一個窗口消息,你可以發送給所有進程,其他進程*可以*處理這個消息。 http://stackoverflow.com/questions/11167854/sending-wm-settingchange-message-to-refresh-desktop-autoit-possibly – harper
承載COM對象的過程是什麼?它在什麼情況下運行? –
@ChristopherPainter不知道如何瞭解上下文,但我相信客戶端進程正在託管對象(因此我推斷Explorer對環境變化是無視的)。線程模型是公寓。接口類從'CComObjectRootEx'派生。 –
Dialecticus