我尝试创建安装程序来安装应用程序。 基本的东西工作正常,但我有问题,只需复制一个现有的文件,它位于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指令中使用常量? 任何帮助表示赞赏。
答案 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中的内部路径处理往往会吃掉/
斜线......