NSIS简单复制一个文件从程序文件目录中的另一个文件夹到安装目录不起作用

时间:2014-11-09 16:17:19

标签: file copy nsis

我尝试创建安装程序来安装应用程序。 基本的东西工作正常,但我有问题,只需复制一个现有的文件,它位于Program Files文件夹的某个子文件夹中。 这背后的情况是,应用程序具有不同的版本和许可证文件。 安装应用程序后,安装程序将查找现有文件,如果存在,则应将该许可证文件复制到$ INSTDIR / license文件夹。

示例:

 C:\Program Files (x86)\MyApp\Ver1.0\license\   // here's the location of old license file
 C:\Program Files (x86)\MyApp\Ver2.0\license\   // here to put the old license file

以下部分简要介绍相关内容:

Section "License of other Version"
IfFileExists '$PROGRAMFILES\MyApp\Ver1.0\license\some_license.slc' beginLicense endLicense
Goto endLicense
beginLicense:
  MessageBox MB_OK "We have found an old license file. Do you wanna to use it for current installation ?"
  CreateDirectory "$INSTDIR\license"
  CopyFiles "$PROGRAMFILES\MyApp\Ver1.0\license\some_license.slc" $INSTDIR/license/some_license.slc"
endLicense:
    MessageBox MB_OK "There were no license found."
SectionEnd

编译运行正常,但安装过程在尝试复制文件时表示错误。但它没有给出进一步的解释,为什么它失败了。 我也试过使用File指令,但是由于使用了file指令中的常量(找不到文件,以及那种错误),甚至脚本无法编译,因此产生了其他错误。 我也尝试使用一个宏,这里提到另一个stackoverflow问题(sry,还没有链接),但它也没有对我有用。 我做错了什么,是不允许在CopyFile指令中使用常量? 任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

您需要更改:

CopyFiles "$PROGRAMFILES\MyApp\Ver1.0\license\some_license.slc" $INSTDIR/license/some_license.slc"

要:

CopyFiles "$PROGRAMFILES\MyApp\Ver1.0\license\some_license.slc" $INSTDIR\license\some_license.slc"

答案 1 :(得分:1)

NSIS不是/斜杠的粉丝。虽然大多数低级kernel32函数都可以处理它们,但并不是shell中的所有东西都可以,而且可能包括SHFileOperation使用的CopyFiles。即使不是这种情况,NSIS中的内部路径处理往往会吃掉/斜线......