复制包含其所有内容和子文件夹的文件夹

时间:2018-11-17 02:07:10

标签: nsis

刚开始使用NullSoft,我试图安装包含其文件和子文件夹的文件夹,我无法找出问题出在哪里,我可以寻求帮助吗?

OutFile "Autoclicker.exe"

InstallDir $PROGRAMFILES

Section
SetOutPath $INSTDIR
CopyFiles "C:\Users\cameron\Desktop\NullSoft\PH INSTALLER\Data\Autoclicker\Autoclickr.ink" "$DESKTOP" 
WriteUninstaller $INSTDIR\Uninstaller.exe
File /r "C:\Users\cameron\Desktop\NullSoft\PH INSTALLER\Data\Autoclicker\"

SectionEnd 

Section "Uninstall"
Delete $INSTDIR\Autoclicker
Delete $INSTDIR\Uninstaller.exe
SectionEndenter code here

2 个答案:

答案 0 :(得分:1)

InstallDir应该在其路径中包含应用程序的名称,而不仅仅是要安装到的根目录。

CopyFiles将文件从最终用户计算机上的一个位置复制到另一个位置,不能用于从安装程序中提取文件!通常用于从CD复制文件或制作某些内容的备份副本。

File中使用/r指令时,应使用通配符filespec来包含所有文件。

我建议您将代码更改为以下形式:

!define MySource "C:\Users\cameron\Desktop\NullSoft\PH INSTALLER\Data\Autoclicker"

InstallDir $PROGRAMFILES\Autoclicker

Section
SetOutPath $INSTDIR
WriteUninstaller $INSTDIR\Uninstaller.exe
File /r "${MySource}\*.*"
SetOutPath $Desktop
File "${MySource}\Autoclickr.ink"
SectionEnd

我不知道什么是.INK文件,但听起来不像是用户桌面上的文件。如果您实际上是指.LNK(快捷方式/链接),则应使用CreateShortcut指令来创建.LNK文件:

CreateShortcut "$Desktop\Autoclikr.lnk" "$InstDir\MyApp.exe"

最后,在卸载程序中,您必须使用RMDir /r删除目录,而不是Delete

答案 1 :(得分:0)

正如@Anders所述,您可以使用File /r递归安装文件。该文档位于NSIS File Reference