首页 > 解决方案 > 复制文件夹及其所有内容和子文件夹

问题描述

刚开始使用 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

标签: nsis

解决方案


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

CopyFiles将文件从最终用户机器上的一个地方复制到另一个地方,它不能用于从您的安装程序中提取文件!它通常用于从 CD 复制文件或制作某些东西的备份副本。

与您一起使用该File指令时,/r应使用通配符文件规范来包含所有文件。

我建议您将代码更改为以下内容:

!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.


推荐阅读