为了将来参考,这里是工作解决方案。
在 flexera 论坛上问了同样的问题,这就是我得到的:
在我的脑海中(没有 InstallShield 方便检查) 1)创建一个 InstallScript 项目,只需接受新项目向导中的所有默认值,除非您想添加本地化或其他内容。2) 您的描述暗示您不需要维护(修理、修改、卸载)支持。如果正确,请转到 Project\Settings 并在“维护”选项卡上选择“不卸载或维护”。3)您可以将代码放在 OnFirstUIBefore 函数的顶部,然后调用 Exit 以便永远不会执行其余的默认代码,因为您没有安装任何东西。
作为 InstallShield IDE 的一部分,开始菜单(适用于 IS2012 Spring)中有一个工具,用于演示所有内置对话框。您可以浏览这些选项并选择最适合您情况的对话框。听起来你想要:
调用 AskPath 或 SdAskDestPath(还有其他几种可能)
然后调用 AskText 并保存该字符串。
如果您需要对默认对话框进行布局或文本更改,请查看您的对话框视图并选择您在上面选择的任何对话框并进行编辑。(如果您决定使用皮肤,请确保在更改任何对话框布局之前选择皮肤。)
然后做一些类似于 WriteLine 示例的功能体http://kb.flexerasoftware.com/doc/Helpnet/installshield14langref/LangrefWriteLine_Example.htm
实际的 WriteLine 示例函数原型用于 MSI 自定义操作,这不是您想要的。忽略函数 protoype,只使用项目中的代码在您已经收集的路径处创建文件并编写您收集的文本行。
然后调用Exit;
(非常感谢用户 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;