2010-10-29 88 views
1

我試圖讓下面的工作:維克斯ScheduleReboot條件

上的程序的第一次安裝,它修改系統的環境變量,因此,你必須按順序重新啓動程序完全正常工作。這樣做在維克斯是相當簡單的,你只安排一個重新啓動:

<InstallExecuteSequence> 
    <ScheduleReboot After="InstallFinalize" /> 
</InstallExecuteSequence> 

我遇到的問題是我希望能夠做次要升級到這個程序(那些在版本號的變化,但產品GUID不),這不需要重新啓動。

在我試圖獲得有條件重啓工作,我試圖做的是:

<Product 
    ... 
    Version="1.0.1" 
    UpgradeCode="MYUPDATEGUID-C39B-4DDE-BA5B-6113463F60C2" 
    ... 
    > 

<Upgrade Id="MYUPDATEGUID-C39B-4DDE-BA5B-6113463F60C2"> 
    <UpgradeVersion OnlyDetect="yes" Property="UPGRADING" 
        Maximum="1.0.1" IncludeMaximum="yes" /> 
</Upgrade> 

... 

<InstallExecuteSequence> 
    <ScheduleReboot After="InstallFinalize">NOT UPGRADING</ScheduleReboot> 
</InstallExecuteSequence> 

這是偉大的,但它不工作。無論我做什麼,它總是嘗試安排重新啓動。

它似乎是問題屬性UPGRADING - 如果我用UPGRADING代替NOT UPGRADING,它從不要求重新啓動。

任何比我更有經驗的人都會覺得很棒。

+0

ScheduleReboot一般不應該使用,如果是空調是至關重要的。 [這裏有一些細節](https://stackoverflow.com/a/48842663/129130)。 – 2018-03-08 11:54:35

回答

1

我想知道更多關於你最初的假設,你需要重新啓動。 WriteEnvironmentStrings將廣播一個WM_SETTINGSCHANGE,正確編寫的應用程序應該尊重它。由於缺少像Win 95/98這樣的邊緣案例,以及服務控制管理器設計不佳並忽略這些消息的事實,我認爲一般情況下,您不應該首先需要重新啓動。

否則,如果您正在進行次要升級,請考慮使用屬性「未安裝」。這將在後續的維修,維護,拆卸,次要升級和補丁期間保持運行。

WriteEnvironmentStrings Action