# FileInstall

在已编译的脚本中包含指定的文件.

    FileInstall Source, Dest , Overwrite

## 参数

Source

  类型: 字符串

  要添加到已编译可执行文件中的文件名. 如果没有指定绝对路径, 则假定该文件位于(或相对于) 脚本自己的目录中.

  这个参数必须是一个带引号的字符串(不是变量或任何其他表达式), 并且必须列在函数名 FileInstall 的右边(即, 不能在它下面使用的延续行上).

Dest

  类型: 字符串

  当从可执行文件中提取 Source 时, 为其创建的文件的名称. 如果没有指定绝对路径则假定在 A_WorkingDir. 目标目录必须已经存在.

Overwrite

  类型: 整数

  此参数指定是否覆盖已存在的文件. 如果省略, 它默认为 0(不覆盖). 否则, 请指定以下数字之一:

  0: 不覆盖现有的文件. 如果 Dest 已经存在, 则操作会失败并且没有任何效果.

  1: 覆盖现有的文件.

  其他值保留供将来使用.

## 错误处理

失败时抛出异常.

任何不能将文件写到目的地的情况都被认为是失败. 例如:

- 目标文件已经存在, 并且 Overwrite 参数为 0 或省略.
- 由于权限错误, 或由于文件正在使用, 目标文件无法打开.
- 目标路径无效或指定了一个不存在的文件夹.
- 源文件不存在(只针对未编译的脚本).

## 备注

当 Ahk2Exe 在编译脚本的过程中读取对这个函数的调用时, Source 所指定的文件会被添加到所生成的编译脚本中. 之后, 当编译后的脚本 EXE 运行并执行对 FileInstall 的调用时, 该文件会从 EXE 中提取并写入 Dest 指定的位置.

在编译过程中, 添加到脚本中的文件既不会被压缩也不会被加密, 但编译的脚本 EXE 可以通过使用 Ahk2Exe 中适当的选项进行压缩.

如果在普通(未编译) 脚本中使用此函数, 则会简单地复制一个副本 -- 这有助于测试最终将被编译的脚本. 如果完整的源路径和目标路径相同, 则不进行任何操作, 因为尝试将文件复制到其当前位置将导致错误. 路径在使用 GetFullPathName 展开后与 lstrcmpi 进行比较.

## 相关

FileCopy, #Include

## 示例

在脚本的编译版本中包含一个文本文件. 之后, 当编译后的脚本被执行时, 包含的文件会被解压缩到另一个位置, 并使用指定的名字. 如果这个位置上已经有这个名字的文件, 它将被覆盖.

    FileInstall "My File.txt", A_Desktop "\Example File.txt", 1

dftg