2017-03-07 60 views
0

我想將屬性值更改爲對話框中的選定文本。如何在InstallScript中更改屬性

這是我的示例源。

#include "ifx.h" 
STRING outPath; 
export prototype MyFunction(HWND); 

function OnFirstUIBefore() 
    NUMBER nResult, nSetupType, nvSize, nUser; 
    STRING szTitle, szMsg, szQuestion, svName, svCompany, szFile, szDir; 
    STRING szLicenseFile; 
    BOOL bCustom, bIgnore1, bIgnore2; 
begin 

Dlg_SdAskDestPath:  
    nResult = SdAskDestPath(szTitle, szMsg, INSTALLDIR, 0); 
    if (nResult = BACK) goto Dlg_SdAskDestPath; 

Dlg_AskOutPath:  
    nResult = AskDestPath(szTitle, szmsg, szDir, 0); 
    if (nResult = BACK) goto Dlg_SdAskDestPath; 
    outPath = szDir; 
    MyFunction(ISMSI_HANDLE); 

return 0; 
end; 

function MyFunction(hMSI) 
    STRING value; 
begin 
    MsiSetProperty(hMSI, "OutPutPath", outPath); 
end; 

OutPutPath在完成安裝後用於自定義操作。

但在自定義操作中讀取時,OutPutPath未被更改。

我想我不能使用ISMSI_HANDLE。但我不知道我必須使用什麼。

我試圖做出自定義操作,在完成安裝後加載安裝腳本的方法MyFunction。

它運作良好,但全局變量outpath中爲NUL ..

請告訴我,我怎麼能做到這一點,如果你知道。

謝謝。

回答

0

您至少必須使用public property,即名稱不包含任何小寫字母的名稱。如果您在受限制的環境中支持安裝,則您可能還必須在SecureCustomProperties中列出它以允許用戶對其進行修改。

但是我不能確定你的註釋中描述了確切的情況:

我試圖讓這加載安裝腳本的方法的MyFunction完成後安裝自定義操作。

如果此方案確實是在安裝的Windows Installer部分結束後(InstallScript MSI在運行代碼之前和之後運行),則整個屬性可能無法存活以滿足您的需求。爲了支持讀取當時的值,您將不得不考慮其他方法,例如將值寫入註冊表或寫入文件(例如,在SUPPORTDIR中)。