NSIS简单地将一个文件从program files目录中的另一个文件夹复制到installation dir不工作

NSIS简单地将一个文件从program files目录中的另一个文件夹复制到installation dir不工作,file,copy,nsis,File,Copy,Nsis,我试图创建一个安装程序来安装应用程序。 基本的东西很好用,但我有问题,当涉及到简单地复制一个现有的文件时,它位于ProgramFiles文件夹的某个子文件夹中。 这背后的场景是,应用程序具有不同的版本和许可证文件。 安装应用程序时,安装程序会查找现有文件,如果存在,则应将该许可证文件复制到$INSTDIR/license文件夹 例如: C:\Program Files (x86)\MyApp\Ver1.0\license\ // here's the location of old lic

我试图创建一个安装程序来安装应用程序。 基本的东西很好用,但我有问题,当涉及到简单地复制一个现有的文件时,它位于ProgramFiles文件夹的某个子文件夹中。 这背后的场景是,应用程序具有不同的版本和许可证文件。 安装应用程序时,安装程序会查找现有文件,如果存在,则应将该许可证文件复制到$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指令中使用常量(File not found,诸如此类的错误),甚至脚本也无法编译。 我还尝试使用一个宏,在这里提到的另一个stackoverflow问题(sry,不再有链接),但它对我也不起作用。 我做错了什么,不允许在CopyFile指令中使用常量吗? 感谢您的帮助。

您需要更改:

CopyFiles“$PROGRAMFILES\MyApp\Ver1.0\license\some\u license.slc”$INSTDIR/license/some\u license.slc”

致:

CopyFiles“$PROGRAMFILES\MyApp\Ver1.0\license\some_license.slc”$INSTDIR\license\some_license.slc”
您需要更改:

CopyFiles“$PROGRAMFILES\MyApp\Ver1.0\license\some\u license.slc”$INSTDIR/license/some\u license.slc”

致:


CopyFiles“$PROGRAMFILES\MyApp\Ver1.0\license\some_license.slc”$INSTDIR\license\some_license.slc”
NSIS不喜欢使用斜杠。虽然大多数底层内核32函数都能处理它们,但并非shell中的所有东西都能处理,这可能包括
CopyFiles
使用的
SHFileOperation
。即使情况并非如此,NSIS中的内部路径处理往往会消耗
/
斜杠…

NSIS不喜欢
/
斜杠。虽然大多数底层内核32函数都能处理它们,但并非shell中的所有东西都能处理,这可能包括
CopyFiles
使用的
SHFileOperation
。即使情况并非如此,NSIS中的内部路径处理往往会消耗
/
斜杠…

使用SysInternals Process Monitor查看安装程序运行时读取的文件。还要注意的是,引号不正确,斜杠是/但应该是\。就是这样!那个愚蠢的错误,我真的。。。你是对的,在把斜杠改成反斜杠后,它起了作用。。谢谢!使用SysInternals Process Monitor查看安装程序运行时读取的文件。还要注意的是,引号不正确,斜杠是/但应该是\。就是这样!那个愚蠢的错误,我真的。。。你是对的,在把斜杠改成反斜杠后,它起了作用。。谢谢!第2个参数中缺少双引号第2个参数中缺少双引号