Installshield 2011:从一个窗口获取路径,从第二个窗口获取文本

时间:2013-07-02 06:45:42

标签: file input dialog installshield installscript

美好的一天,大家。我分配的任务包括创建简单的installscript-only项目,该项目应该有2个窗口:首先将提示用户输入路径并在此指定位置创建文本文件,而第二个将提示文本输入并保存用户写入的任何内容进入这个文本文件。

有趣的一点是,我有小的installshield经验(完成的教程......好吧,是的,就是这样)并且在此之上的编程经验非常少。据我所知,我应该首先创建两个自定义对话框窗口(例如通过从标准窗口克隆它们),然后使用函数创建.rul文件,确定每个窗口的行为。之后,将它们包含在main setup.rul中,并在特定时间点调用函数。

问题是 - 什么确切的对话窗口/功能/时间点最适合这样的任务?作为参考我搜索到“序列号验证示例项目”,但老实说,它自定义默认窗口的方式让我更加困惑...所以,请,有人可以帮助吗?谢谢。

1 个答案:

答案 0 :(得分:0)

供将来参考,这是工作解决方案。

在flexera论坛上问同样的问题,这就是我得到的:

  

离开我的头顶(没有InstallShield方便检查)1)   创建一个InstallScript项目,只需接受所有默认值   新项目向导,除非您要添加本地化或   一些东西。 2)您的描述暗示您不需要   维护(修复,修改,卸载)支持。如果正确的话去   Project \ Settings并在Maintenance选项卡上选择'no uninstall or   保养'。 3)您可以将代码放在最上面   OnFirstUIBefore函数然后调用Exit以便其余部分   默认代码永远不会执行,因为您没有安装任何东西。

     

作为InstallShield IDE的一部分,在“开始”菜单中(适用于IS2012   Spring)是一个演示所有内置对话框的工具。您   可以查看这些选项并选择最适合的对话框   你的情况。听起来你想:

     

调用AskPath或SdAskDestPath(还有其他几种可能性)

     

然后调用AskText并保存该字符串。

     

如果您需要对默认对话框进行布局或文本更改,请查看   在Dialogs视图中,选择上面选择的对话框   并编辑它。 (如果您决定使用皮肤,请确保选择皮肤   在进行任何对话框布局更改之前。)

     

然后执行与WriteLine的功能主体类似的操作   例如http://kb.flexerasoftware.com/doc/Helpnet/installshield14langref/LangrefWriteLine_Example.htm

     

实际的WriteLine示例函数原型用于MSI自定义   行动不是你想要的。忽略函数protoype和   只需使用项目中的代码即可在路径中创建文件   已收集并写下您收集的文本行。

     

然后拨打退出;

(非常感谢用户phill_mn的答案)

这是setup.rul的代码:

#include "ifx.h"

function OnFirstUIBefore()
    number nvFileHandle;
    string  svResult;
    string  szTargetPath, szFeatures;
    BOOL bLicenseAccepted;

begin   

AskPath ("Please choose a path where text file will be saved","c:\\",szTargetPath);

MessageBox("File yourtext.txt wiil be created or overwritten at " +szTargetPath, INFORMATION);

AskText ("Please enter some text to save into that file", "Text goes here", svResult); 

OpenFileMode (FILE_MODE_APPEND);

   if (CreateFile (nvFileHandle, szTargetPath, "yourtext.txt") < 0) then 
        MessageBox ("Creating failed.", SEVERE); 
        abort; 
   else 

        if (WriteLine(nvFileHandle, svResult) < 0) then 
            MessageBox ("Writing failed.", SEVERE); 
        else 
            MessageBox ("Success.", INFORMATION); 
        endif; 

    endif; 

    CloseFile (nvFileHandle); 

Do(EXIT); 

    return 0;
end;