如何在InstallScript

时间:2017-03-07 05:49:04

标签: installshield

我想将属性值更改为对话框中的选定文本。

这是我的样本来源。

#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 ..

如果你知道的话,请教我如何做到这一点。

谢谢。

1 个答案:

答案 0 :(得分:0)

至少,您必须使用public property,即名称不包含任何小写字母的SecureCustomProperties。如果您支持在受限制的环境中安装,您可能还必须在enter image description here中列出它以允许用户对其进行修改。

但是,我不确定您的评论所描述的具体情况:

  

我尝试进行自定义操作,在完成安装后加载安装脚本的方法MyFunction。

如果此方案确实在安装的Windows Installer部分结束之后(InstallScript MSI在之前和之后运行代码),则整个属性可能无法生存以执行您所需的操作。要支持读取当时的值,您必须考虑其他方法,例如在注册表中写入值,或者在文件中(例如在SUPPORTDIR中)。