首页 文章

在InstallShield中,如何在SQL Text Replacement使用之前更改我的Property的值?

提问于
浏览
0

What I want to do

在InstallShield中,我想在SQL文本替换功能使用它之前设置一个属性的值 . 我希望新的Property值来自我添加到对话框中的Edit控件 .

What I've done so far

我已将SQL Scripts添加到InstallShield项目中,其中包括InstallShield文本替换功能的占位符 . 我已经使用Text Replacement选项卡在SQL脚本中查找和替换占位符,其中包含我已添加到Property Manager的Property的值 . 这可以正常工作,但仅适用于Property的默认值 .

Where I'm stuck

问题是我希望新值来自我的自定义对话框中的编辑控件,但我找不到这样做的方法 . 文本替换始终使用属性的默认值 .

我尝试过的是以下InstallScript,当用户在我的自定义对话框上单击“下一步”时,它会运行:

CtrlGetText("MyDialog", EDIT_VALUE_FROM_USER, svValueFromUser);
MsiSetProperty ( hwndDlg, "EDIT_VALUE_FROM_USER", svValueFromUser);

EDIT_VALUE_FROM_USER是我的 property . 这运行没有错误,但该值不会到达最终的SQL脚本 .

为什么SQL Text Replacement不使用EDIT_VALUE_FROM_USER的新值?我怎样才能诊断出它无法正常工作的原因?我应该以完全不同的方式做这件事吗?

2 回答

  • 0

    原来是因为我没有使用系统属性ISMSI_HANDLE .

    因此,在自定义对话框中从Edit控件编写Property的正确代码是:

    CtrlGetText("MyDialog", EDIT_VALUE_FROM_USER, svValueFromUser);
    MsiSetProperty (ISMSI_HANDLE, "EDIT_VALUE_FROM_USER", svValueFromUser);
    
  • 1

    我猜你的属性没有在SecureCustomPublicProperties属性中列出,并且当安装程序转换到安装执行序列时,它将恢复为默认值 . 安装的日志文件将提供更多数据 .

相关问题