【问题标题】:How to let user to browse to a file to be copied with Inno Setup如何让用户浏览到要使用 Inno Setup 复制的文件
【发布时间】:2013-01-31 17:25:46
【问题描述】:

我需要用户浏览到一个文件,选择它,然后将该文件从选定的源复制到应用程序文件夹。

关注这篇文章 How to show/use the user selected app path {app} in InputDirPage in Inno Setup? 和 Inno Setup 文档,我来到了这段代码:

[Files]
Source: {code:GetDBPath}; DestDir: "{app}"; Flags: confirmoverwrite uninsneveruninstall;

[Code]
var
  SelectDBPage: TInputDirWizardPage;  
  DBPath: String;

procedure InitializeWizard;
begin
  SelectDBPage := CreateInputDirPage(wpSelectDir, 'Select file', 'Select file',    'Select file', False, '');
  SelectDBPage.Add('');
  SelectDBPage.Values[0] := ExpandConstant('{src}\DB.FDB');
  DBPath := SelectDBPage.Values[0];
end;

function GetDBPath():String;
begin
    Result := DBPath;
end;

我的问题是检索文件路径。在指令“源:{code:GetDBPath}”中,我收到“未知文件名前缀 {code:”错误。 如何在 [File] 部分引用选定的文件路径?

谢谢

【问题讨论】:

  • 欢迎来到 StackOverflow。看起来你很困惑。 [files] 部分在编译时从脚本中读取。然后编译器生成安装程序,其中包含安装程序的所有文件和说明。 InitializeWizard 在运行时(运行生成的安装程序时)调用,因此您无法显示向导页面来更改设置中包含的文件。这与编程语言的编译时和运行时非常相似。
  • 你的问题不清楚的是,如果你想让 user 在编译时选择一个文件来包含在你的脚本中,或者你想让用户在目标计算机中选择一个文件并在运行时将该文件移动/复制到该目标计算机上的其他位置。

标签: installation inno-setup


【解决方案1】:

您需要将external 标志添加到[Files] 条目。这意味着将在运行时评估源,并且可以包含 {code:...} 常量。

您的GetDBPath() 函数也没有得到正确的值。您将返回创建页面后未更新的 DBPath 的值,而不是从 SelectDBPage.Values[0] 获取最新值。

【讨论】:

  • 外部标志是我需要的。似乎仍然没有采用正确的值。我的意思是,当我从浏览窗口中选择文件时,我在输入字段中看不到文件路径更改,并且在下一步我没有选择的值
  • 您没有从页面读取值。我已经更新了答案。
  • 非常感谢。我是 inno 设置脚本的新手。再次感谢。
  • @user2029958,别忘了accept the answer ;-) @Deanna,小心那个code getter。它被调用了很多次,甚至在InitializeWizard 事件通过之前,所以你可能会访问SelectDBPage 对象,它还没有实例。见下文...此评论会在几分钟后消失,请不要回复...
猜你喜欢
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多