2012-09-23 93 views
3

我用InnoSetup設置環境變量在註冊表中:Innosetup SendMessage函數改變環境後值

[Registry] 
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; ValueName: "MY_PROGRAM_HOME_DIR"; ValueData: "{app}" 

但系統無法看到這個變量,直到我打電話SendMessage

[Code] 
procedure DeinitializeSetup(); 
begin 
    // HWND_BROADCAST = $FFFF 
    // WM_SETTINGCHANGE = $001A 
    SendMessage($FFFF, $001A, 0, Longint(PChar('Environment'))); 
end; 

InnoSetup說:

...列60:類型不匹配

如何正確InnoSetup腳本類型轉換成PCharLongint

回答

4

使用ChangesEnvironment指令而不是從腳本代碼中執行相同的操作。從參考:

當設置爲yes,在安裝程序安裝結束時將通知 其他運行的應用程序(尤其是Windows資源管理器),他們應該 從註冊表重新加載其環境變量。

在InnoSetup,當你使用上面的指令中,下面的代碼被稱爲內:

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 
    LPARAM(PChar('Environment')), SMTO_ABORTIFHUNG, 5000, MsgResult); 
0

使用ChangesEnvironment

工作對我罰款。

例:

[Setup] 
ChangesEnvironment=yes 

注意: 的 'DeinitializeSetup'

呼叫前的廣播消息出現